In Situationen wie diesen ist das Modell normalerweise defekt. In diesem Fall glaube ich, dass es sich um die Idee "Grafansicht" handelt. Es gibt viele Möglichkeiten, dies richtig zu machen. Beim Rendern wird es nicht erhöht, da Sie Modellarbeit im UI-Code ausführen (konzeptionell und in der Implementierung unterbrochen).
Speichern Sie zuerst die Fragen, die der Benutzer irgendwo besucht hat. Warum nicht eine {questionsVisited:[]}
Eigenschaft auf dem Benutzer?
Verwenden Sie einen Meteor.call(...)
Methodenaufruf eine Ansicht registrieren statt:
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;
});
So wie etwa die Sicht auf Änderungen an der Benutzeroberfläche erhöht wird? Nun, machen wir das nicht speziell. Lassen Sie uns die Anzahl der Aufrufe erhöhen nur, wenn sich die Frage ändert.
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();
});
});
Und diese Frage Helfer Sachen aller ...
Dies ist sogar noch besser als das, was man wollte loswerden ursprünglich. Jetzt werden Ansichten für denselben Benutzer nicht doppelt gezählt. Wenn dies das gewünschte Verhalten ist, entfernen Sie die questionsVisited
Logik.
Nur Ändern Sie die 'question_id'
Sitzungsvariable, wenn Sie tatsächlich die logische Frage ändern, mit der der Benutzer arbeitet.
Sie sind brillant. Ich hätte die user_id in Frage oder question_id im Benutzer wie von Ihnen vorgeschlagen registriert. Ich denke, deine Lösung ist sauberer. Ich lerne immer noch Meteor. Kann ich fragen, warum ich Helfermaterial loswerden soll? – user857188