Handlebars函数导致代码中出现紧密循环
Handlebars function causing tight loop in code
我的应用程序似乎遇到了一个障碍,导致浏览器进入了一个永无止境的紧密循环。
在应用程序中,我在一条路线上有一个卸载功能,它会增加一个值来计数和显示项目的浏览次数。
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
彼得。
我猜卸载函数会给你带来一些悲伤。当您执行findOne时,var项目会变为被动的,并且会观察到对它的任何更新(就像您在它下面执行的更新一样)。您实际上不需要执行findOne,只需直接更新即可,因为id在params中。尝试
unload: function() {
// need to increment views value by one
projectDocs.update(this.params._id,
{$inc: {views: 1}}
);
}
});
编辑:实际上,你可能最好把更新放在after钩子里,而不是卸载,因为如果用户关闭窗口或其他什么东西,卸载可能不会被调用,而after会记录视图,只要执行了操作函数。
相关文章:
- JavaScript/Jquery:一个特殊用途的for循环函数
- 为循环函数中的元素指定单击
- Jquery下一个和上一个按钮循环函数
- 循环函数(Javascript回调帮助)
- 循环函数不起作用
- 使用ajax调用循环函数
- 在Javascript中修改循环函数的参数
- 如何循环函数数组并在单击时一次执行一个
- 设置超时可以保存我的循环函数不被视为无响应
- 具有超时的循环函数
- j查询如何在一系列延迟后循环函数
- 如何将 JavaScript forEach 循环/函数转换为 CoffeeScript
- for 循环函数似乎未运行
- 对于内部循环函数(新手)
- 循环函数会导致它在 javascript 中无响应
- 循环函数
- 如何优化循环函数
- JS拒绝循环函数
- 中断循环函数
- 在 JavaScript 中循环函数可以吗?