通常,在这种情况下,模型会出现问题。在这种情况下,我相信这是“计数视图”的想法。有很多方法可以正确地做到这一点。不是在渲染时增加它,因为您正在 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();
});
});
并摆脱所有这些问题助手的东西......
这甚至比你最初想要的还要好。现在,同一用户的观看次数不会计算两次。如果这是所需的行为,请删除questionsVisited
逻辑。
仅'question_id'
当您实际更改用户正在处理的逻辑问题时才更改会话变量。