आमतौर पर, इस तरह की स्थितियों में, मॉडल के बारे में कुछ तोड़ दिया जाता है। इस मामले में, मेरा मानना है कि यह "गिनती दृश्य" विचार है। इसे सही तरीके से करने के कई तरीके हैं। प्रस्तुत करने पर इसे बढ़ाना नहीं है, क्योंकि आप यूआई कोड में मॉडल काम कर रहे हैं (अवधारणात्मक रूप से और कार्यान्वयन में टूटा हुआ)।
पहले, सवाल उपयोगकर्ता कहीं का दौरा किया दुकान। उपयोगकर्ता पर {questionsVisited:[]}
संपत्ति क्यों नहीं?
बजाय एक दृश्य रजिस्टर करने के लिए एक Meteor.call(...)
विधि कॉल का उपयोग करें:
Meteor.methods({
viewQuestion: function(questionId) {
// check if the user hasn't visited this question already
var user = Meteor.users.findOne({_id:this.userId,questionsVisited:{$ne:questionId}});
if (!user)
return false;
// otherwise, increment the question view count and add the question to the user's visited page
Meteor.users.update({_id:this.userId},{$addToSet:{questionsVisited:questionId}});
Questions.update({_id:questionId},{$inc:{views:1}});
return true;
});
तो यूआई परिवर्तन पर दृश्य बढ़ाने के बारे में? खैर, चलो विशेष रूप से ऐसा नहीं करते हैं। के देखे जाने की संख्या केवल जब सवाल परिवर्तन को बढ़ा देते हैं।
Meteor.autorun(function() {
var questionId = Session.get("question_id");
Meteor.call('viewQuestion',questionId,function(e,r) {
if (r)
console.log("Question " + questionId + " logged an increment.");
else
console.log("Question " + questionId + " has already been visited by user " + Meteor.userId();
});
});
और यह सब सवाल सहायक सामान से छुटकारा पाने के ...
यह वही है आप मूल रूप से चाहता था से भी बेहतर है। अब एक ही उपयोगकर्ता के लिए विचारों की गणना दो बार नहीं की जाती है। यदि वह वांछित व्यवहार है, तो questionsVisited
तर्क हटा दें।
केवल'question_id'
सत्र चर बदलें जब आप वास्तव में उस तर्कसंगत प्रश्न को बदलते हैं जिसमें उपयोगकर्ता काम कर रहा है।
आप शानदार हैं। मुझे उपयोगकर्ता में प्रश्न या प्रश्न_आईडी में उपयोगकर्ता_आईडी का दौरा किया जाना चाहिए था, जैसा कि आप सुझाते हैं। मुझे लगता है कि आपका समाधान क्लीनर है। मैं अभी भी उल्का का एक शिक्षार्थी हूं। क्या मैं पूछ सकता हूं कि मुझे सहायक सामग्री से छुटकारा क्यों मिलना चाहिए। – user857188