通常、このような状況では、モデルに何か問題があります。この場合、それは「カウントビュー」のアイデアだと思います。これを正しく行う方法はたくさんあります。UIコードでモデル作業を行っているため(概念的にも実装的にも壊れています)、レンダリング時にインクリメントすることはできません。
まず、ユーザーが訪れた質問をどこかに保存します。{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;
});
では、UI の変更に関するビューをインクリメントするのはどうでしょうか? まあ、具体的にはやめましょう。質問が変わったときだけ閲覧数を増やしましょう。
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();
});
});
そして、この質問ヘルパーのものをすべて取り除きます...
これは、最初に望んでいたものよりも優れています。同じユーザーのビューが 2 回カウントされなくなりました。questionsVisited
それが望ましい動作である場合は、ロジックを削除します。
'question_id'
ユーザーが作業している論理的な質問を実際に変更する場合にのみ、セッション変数を変更してください。