meteor.js&mongodb – 如何在spacebars中传递当前元素的_id

CONTEXT

我正在尝试更新Venue集合中的一个对象,以包含Event集合中对象的_id。 当前页面显示一个事件,所以this.params._id产生当前事件的_id …我可以操纵该对象。

我需要的

我使用Spacebars的each循环通过前端的场地。 在每个场馆项目旁边都有一个“添加场地到事件”button – 我希望这个button将相应场馆的_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"); } 

这个代码产生的suggestedVenues: null当你console.log相关的Venue。

正如您已经确定的,您需要将两个关键数据传递到您的方法:事件ID和场所ID。

meteor文件说这个事件处理程序:

处理程序还会在其中接收一些额外的上下文数据,具体取决于处理事件的当前元素的上下文。 在模板中,元素的上下文是元素出现的数据上下文,由块助手(例如#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); } 

我将把这个方法本身作为读者的练习;)

希望有所帮助。

这个问题(由TheMeteorChef Slack Channel上的rglover解决)是因为我正在使用Meteor的Differential Boiler Plate ,所以devise模式让我把模板助手放在模板的控制器中。 这意味着this是指路由实例。

我将事件处理程序移动到每个模板附带的js文件中,因此现在引用模板数据,从而可以获取被单击元素的_id 。 至于显示在页面上的事件的_idRouter.current().params._id允许我访问它。

希望这可以帮助任何可能走上这条路的人!