meteor.js& mongodb - 如何在每个

时间:2015-12-15 20:34:45

标签: javascript jquery node.js mongodb meteor

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

2 个答案:

答案 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。对于页面上显示的事件的_idRouter.current().params._id允许我访问它。

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