gpt4 book ai didi

loops - meteor 模板重载无限

转载 作者:行者123 更新时间:2023-12-04 15:13:29 26 4
gpt4 key购买 nike

使用 Meteor 运行时遇到问题。

我有一个“问题”页面,我想在渲染时增加计数 View 。

所以在我的模板函数中我写

Template.questionview.helpers({
question : function() {
if(Session.equals('main_template_name', 'question')) {
console.log(Session.get('question_id'));
Questions.update({
_id: Session.get('question_id')
}, {
$inc: {
views: 1
}
});
}
});

现在问题来了,当我呈现问题 View 并更新问题项时, View 会再次刷新,因为它是一个反射页面。然后是无限循环。

有人有建议吗?

最佳答案

通常,在这种情况下,模型会出现问题。在这种情况下,我相信这是“计数 View ”的想法。有很多方法可以正确地做到这一点。在渲染时增加它不是,因为您正在 UI 代码中进行模型工作(在概念和实现中都被破坏了)。

首先,将用户访问过的问题存储在某处。为什么不是 {questionsVisited:[]}用户的属性?

使用 Meteor.call(...)方法调用来注册 View :

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 更改的 View 呢?好吧,让我们不要专门这样做。让我们仅在问题发生变化时才增加观看次数。
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' session 变量,当您实际更改用户正在处理的逻辑问题时。

关于loops - meteor 模板重载无限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com