Tipicamente, in situazioni come questa, c'è qualcosa di rotto nel modello. In questo caso, credo che sia l'idea della "vista di conteggio". Ci sono molti modi per farlo correttamente. Incrementarlo sul rendering non lo è, dal momento che stai facendo il lavoro sul modello nel codice UI (rotto concettualmente e in fase di implementazione).
Per prima cosa, memorizza le domande che l'utente ha visitato da qualche parte. Perché non una proprietà {questionsVisited:[]}
per l'utente?
utilizzare una chiamata Meteor.call(...)
metodo per registrare una vista invece:
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;
});
Così come su incrementando la vista sui cambiamenti dell'interfaccia utente? Bene, non lo facciamo in modo specifico. Aumentiamo il numero di visualizzazioni solo quando la domanda cambia.
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();
});
});
E sbarazzarsi di tutta questa roba aiutante domanda ...
questo è ancora meglio di quello che in origine voleva. Ora le visualizzazioni non vengono conteggiate due volte per lo stesso utente. Se questo è il comportamento desiderato, rimuovere la logica questionsVisited
.
Solo cambiare la variabile di sessione 'question_id'
quando si modifica effettivamente la domanda logica con cui l'utente sta lavorando.
Sei brillante. Avrei dovuto registrare user_id visitato in domanda o question_id in utente, come quello che suggerisci. Penso che la tua soluzione sia più pulita. Sono ancora uno studente di Meteor. Posso chiederti perché dovrei sbarazzarmi di cose di supporto. – user857188