我正在尝试在SpaceBars中设置一个SpaceBars,它显示可以按下数组中每件事物的一些按钮。但是,当我按下按钮时,它会给出以下错误:
未登录的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}}为什么会发生这个错误,我该如何解决呢?
发布于 2015-08-07 15:48:20
如果我们看看关于事件的文档
处理程序函数接收两个参数:
event(一个具有事件信息的对象)和template(一个模板实例,用于定义处理程序的模板)。处理程序还根据处理事件的当前元素的上下文在this中接收一些附加的上下文数据。在模板中,元素的上下文是发生该元素的数据上下文,它由块帮助程序(如#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);
}https://stackoverflow.com/questions/31881662
复制相似问题