我似乎在我的应用程序中遇到了障碍,导致浏览器进入一个永无止境的非常紧密的循环。
在应用程序中,我在一个路径上有一个卸载功能,它将值递增计数并显示项目被查看的次数。
unload: function() {
var project = projectDocs.findOne(this.params._id);
// need to increment views value by one
projectDocs.update(project._id,
{$inc: {views: 1}}
);
}
});
这很好用,直到我尝试根据用户所在的角色(使用角色包)启用表单上的按钮。启用按钮的代码如下(仅在div中)。
<a href="{{pathFor 'home'}}" class="btn btn-success {{#unless canQuote}} disabled {{/unless}}">Quote</a>
canQuote助手是
Template.projectPage.helpers({
canQuote: function(){
return Roles.userIsInRole(this.userId, ['tradie','admin'])
},
isOwner: function(){
return this.userId == Meteor.userId();
}
});
一切正常,直到用户登录。按钮被禁用,一切都很好。当用户使用适当的角色登录时,页面只会挂起尝试显示,并且查看的计数只会在某个地方变得非常紧张。
有人能告诉我为什么这是循环的吗?
TA
彼得。
答案 0 :(得分:1)
我的猜测是卸载功能给你一些悲伤。当您执行findOne时,var项目将变为被动,并且会对其进行任何更新(例如,您在其下方执行的更新)。您实际上不需要执行findOne,只需直接更新,因为id在params中。尝试
unload: function() {
// need to increment views value by one
projectDocs.update(this.params._id,
{$inc: {views: 1}}
);
}
});
编辑:实际上你可能最好将更新放入挂钩而不是卸载,因为如果用户关闭窗口或其他东西,可能无法调用卸载,而after只会在操作时记录视图功能执行。