我试图在SpaceBars中使用一个forEach
,其中显示了可以为数组中的每个事物按下的一些按钮。但是,当我按下按钮时,它给了我这个错误:
未捕获的RangeError:调用堆栈的最大大小超出了underscore.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}}
为什么会发生此错误,我该如何解决?
最佳答案
如果我们看the documentation about events:
该处理函数接收两个参数:event
,一个具有
有关事件的信息,以及template
(该事件的模板实例)
定义处理程序的模板。处理程序还会收到一些
this
中的其他上下文数据,具体取决于
当前处理事件的元素。在模板中,元素的
context是该元素所在的数据上下文,由
阻止诸如#with
和#each
之类的帮助器。
综上所述:流星中的事件不接收其数据上下文作为参数:它们接收事件对象和事件发生的模板实例。数据上下文存储在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);
}