为什么这个findOne在模板事件中导致调用堆栈大小错误?

时间:2015-08-07 15:39:31

标签: javascript meteor spacebars

我试图在SpaceBars中有一个forEach,它显示了一些可以按下数组中每个东西的按钮。但是,当我按下按钮时,它会给我这个错误:

  

未捕获RangeError:最大调用堆栈大小超出下划线.js:1025
   _。(匿名函数)@ underscore.js:1025
   EJSON.clone @ ejson.js:475
   (匿名函数)@ ejson.js:494
    .each。 .forEach @ underscore.js:113
   EJSON.clone @ ejson.js:493

     

......一段时间以来......

     

.each。 .forEach @ underscore.js:113
   EJSON.clone @ ejson.js:493
   (匿名函数)@ ejson.js:494
    .each。 .forEach @ underscore.js:113
   EJSON.clone @ ejson.js:493

这是造成错误的findOne

"click .acceptFriend": function(requester){
  currentUserId = Meteor.userId(); 
  requesterUsername = requester;
  requesterId = friendRequests.findOne({$and:[{target:currentUserId}, {requester:requesterUsername}]})._id;

  Meteor.call("acceptRequest", requesterId, requester);
}

我知道它是friendRequests.findOne,因为我已经在每一行上完成了控制台日志,这就是打破它的行。我尝试了几种不同的变体,但似乎在该上下文中friendRequests集合上的任何类型的查找都会破坏它。模板的相关部分是:

{{#each getRequests}}
    {{requester}} <button class='acceptFriend'>accept</button>
{{/each}}

为什么会发生这种错误?如何解决?

1 个答案:

答案 0 :(得分:1)

如果我们查看the documentation about events

  

处理程序函数接收两个参数:event,一个对象   有关该事件的信息,以及template,一个模板实例   定义处理程序的模板。处理程序也收到一些   this中的其他上下文数据,具体取决于上下文   处理事件的当前元素。在模板中,元素的   context是发生该元素的数据上下文,由该元素设置   阻止助手,例如#with#each

总结: Meteor中的事件接收他们的数据上下文作为参数:他们收到事件对象和模板实例。数据上下文存储在this

所以你应该做的是以下几点:

"click .acceptFriend": function(event, template){
  currentUserId = Meteor.userId(); 
  requesterUsername = this.requester;
  requesterId = friendRequests.findOne({$and:[{target:currentUserId}, {requester:requesterUsername}]})._id;

  Meteor.call("acceptRequest", requesterId, requesterUsername);
}