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
。 至于显示在页面上的事件的_id
, Router.current().params._id
允许我访问它。
希望这可以帮助任何可能走上这条路的人!
- Grunt – 如何更新js文件中使用gruntcaching胸围的HTML文件引用?
- 使用nodejs应用程序configurationredis
- 使一个函数的行为像一个实例化的EventEmitter
- 用mongoose保存图像
- 处理错误后跳过承诺链
- 我使用auth0进行用户身份validation,并且我有一个针对CRUDpost(title,img,desc)的API。 如何进行CRUD API的authentication调用?
- 客户端模块工作stream程:(Browserify + npm + gulp)或(RequireJS + Bower + gulp)?
- Express.js服务器error handling(404)。 在我被允许处理错误之前,服务器就会发出exception并抛出exception
- 使用callback完成树行走后执行一个函数