在模板中使用Meteor js中的方法调用

时间:2015-12-10 16:41:00

标签: templates meteor methods

我正在尝试将当前登录的用户ID插入到meteor中集合中特定文档的数组中。我是通过从服务器调用方法来做到这一点的。在大多数情况下,这项工作正常,除了一件事,用户ID应该插入到单击按钮的当前模板中。我正在构建一个“会面聚会”系统,用户应该申请加入特定的会议。因此,用户ID应插入每次参加的会议中。

客户端:

Template.eventcard.events({
    'click .applynow': function(){
        Meteor.call('updatemeetswithuser');
    }
});

服务器代码:

Meteor.methods({
    updatemeetswithuser: function(){
        Meets.update({_str: this._str}, {$push:{users : this.userId}});
    }
});

_str:this_str有效,因为我插入了它,因此它是一个mongo集合而不是流星集合。但是,问题是用户id:s总是插入我的{{#each}}循环中的第一个和同一个文档中,无论单击按钮的模板是什么,而不是按照我希望的方式绑定到每个模板

昨天我在这里问了一个类似的问题:Meteor: Bind function to work for every iteration of template我可以将每个函数彼此独立地绑定到一个特定的模板,我不知道这是否与类似或不相似但可能是可以帮忙。

所以我想我需要做的是通过一个方法以某种方式获取模板的id。谢谢,任何输入都表示赞赏。

1 个答案:

答案 0 :(得分:1)

我认为您需要传递一些参数来更新正确的记录,否则您将始终更新相同的记录,因此您的方法应如下所示:

Meteor.methods({
  updatemeetswithuser: function(meetId){
    Meets.update({_id: meetId}, {$push:{users : this.userId}});
  }
});

我承认我的无知,但我不知道这是什么。我和我没有找到明确的文件。它似乎是mongo的默认id,但如果你用流星开发所有应用程序,我认为你真的不需要。

在客户端显然你必须将正确的id传递给方法。

Template.eventcard.events({
  'click .applynow': function(){
    var meetId = ...; //save in your html or find another solution to get meetId
    Meteor.call('updatemeetswithuser',meetId);
  }
});