CONTEXT
我试图更新Venue集合中的对象以包含Event集合中对象的_id。当前页面显示一个事件,因此this.params._id
产生当前事件的_id ...我可以操纵该对象。
我需要什么
我正在使用Spacebars' each
循环前端的场地。每个Venue项目旁边都有一个" Add Venue to Event"按钮 - 我想要这个按钮将相应Venue的_id添加到当前页面上显示的事件中。
问题
this
指的是当前页面上的事件,不当前正在Spacebars中循环播放的场地。我不确定如何在each
的当前阶段传递场地的_id,以便我可以将其添加到当前页面上显示的事件。
帮助代码
//ADD SUGGESTED VENUE TO EVENT
'click .suggest-venue': function(event) {
var currentEventId = this.params._id;
Meteor.call("updateEvent", currentEventId, {suggestedVenues: [Venues._id]})
toastr.success("Venue Suggestion Added");
}
当您在console.log相关场地时,此代码会产生suggestedVenues: null
。
答案 0 :(得分:1)
正如您所识别的那样,您需要将两个关键数据传递到您的方法中:事件ID和场地ID。
meteor docs说出有关事件处理程序的信息:
处理程序还在
this
中接收一些额外的上下文数据,具体取决于处理事件的当前元素的上下文。在模板中,元素的上下文是该元素出现的数据上下文,由#with
和#each
等块助手设置。
因此,您的事件处理程序应如下所示:
'click .suggest-venue': function() {
var eventId = Router.current().params._id; // Assuming you're using iron:router
var venueId = this._id; // 'this' is the current context within your template at the target element of this event handler
Meteor.call('updateEvent', eventId, venueId);
}
我将这个方法本身作为读者的练习;)
希望有所帮助。
答案 1 :(得分:1)
问题(由TheLteorChef Slack Channel上的rglover解决)是因为我使用Differential Boiler Plate进行Meteor,设计模式让我将模板助手放在模板的控制器中。这意味着this
指的是路由实例。
<强>解强>
我将事件处理程序移动到每个模板附带的js文件中,因此this
现在引用模板数据,允许我获取被点击元素的_id
。对于页面上显示的事件的_id
,Router.current().params._id
允许我访问它。
希望这可以帮助其他任何可能走上这条道路的人!