访问Meteor事件处理程序中的模板助手字典

时间:2015-01-15 11:36:26

标签: javascript meteor meteor-blaze

在Meteor中,我将数据库中的两个对象发送到模板:

Template.myTemplate.helpers({
  helper1: function() {
    var object1 = this;  // data context set in iron:router...path is context dependent
    // modify some values in object1
    return this;
  },
  helper2: function() {
    return Collection2.find({_id: this.object2_id});
  }
});

此模板还有一个事件处理程序,用于修改上面的两个对象。我试图从上面访问helper1和helper2,但如果我调用模板的数据上下文,我只能访问未修改版本的object1。如何访问上面定义的帮助程序?

Template.myTemplate.events({
  'submit form': function(event) {
    event.preventDefault();
    // Access helper2 object and attributes here instead of calling Collection2.find() again
  }
});

2 个答案:

答案 0 :(得分:4)

Helper只是函数,因此可以随意传递并分配给其他变量,因此您可以定义一个函数,然后为其分配模板助手的helper2键,并通过它来调用它的原始引用。事件处理程序。

var helperFunction = function() {
    return Collection2.find({_id: this.object2_id});
};

Template.myTemplate.helpers({
    helper1: function() {
        var object1 = this;  // data context set in iron:router...path is context dependent
        // modify some values in object1
        return this;
    },
    helper2: helperFunction
});

Template.myTemplate.events({
    'submit form': function(event) {
        event.preventDefault();
        var cursor = helperFunction();
    }
});

答案 1 :(得分:0)

如果您可以从事件中修改助手,那么,Meteor应用程序的任何部分都可以做到,这违反了Blaze的设计理念!

Blaze旨在成为单向数据绑定诱人系统。您要求的是使用Angular(单独使用,或与Blaze并排使用,查看THIS),这本质上是一个双向数据绑定诱惑系统。

您可能还想检查React,这也是一种双向数据绑定