把手功能导致代码紧密循环

时间:2013-12-10 04:29:28

标签: javascript meteor user-roles

我似乎在我的应用程序中遇到了障碍,导致浏览器进入一个永无止境的非常紧密的循环。

在应用程序中,我在一个路径上有一个卸载功能,它将值递增计数并显示项目被查看的次数。

   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

彼得。

1 个答案:

答案 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只会在操作时记录视图功能执行。