导致助手对事件做出反应

时间:2015-01-30 22:37:14

标签: javascript meteor reactive-programming

我有一个包含助手和事件的模板,如:

Template.myTemplate.helpers({
  edit: function () {
    console.log('helper');
    return this.value;
  }
});

Template.myTemplate.events({
  'click .edit_button': function () {
    console.log('click');
    // Toggle the value this.value
  }
});

通过日志(这里简化),我可以验证在页面上呈现模板时是否调用了帮助程序。但是,当事件被触发时,不会触发帮助控制台消息。就好像更改值的事件不会触发帮助程序的处理,使得页面不是很活跃。

我试图分配一个反应变量并使用它,但无济于事。

Template.myTemplate.rendered = function () {
  this.value = new ReactiveVar();
}
// Setting and getting using the .get()/.set() methods.

如何从事件中重新处理帮助程序?

1 个答案:

答案 0 :(得分:0)

在事件中,您要将值设置为ReactiveVar对象。 在帮助程序中,您只需返回此对象的值,帮助程序的行为类似于Tracker.autorun,它们是被动的。

Template.myTemplate.helpers({
  edit: function () {
    console.log('helper');
    // helpers are wrapped with Tracker.autorun, so any ReactiveVar.get()
    // inside this function will cause to rerun it
    return Template.instance().value.get()
  }
});

Template.myTemplate.events({
  'click .edit_button': function (e, tmpl) {
    console.log('click');

    // here you save value
    tmpl.value.set(newValue)
  }
});

Template.myTemplate.created = function () {
  this.value = new ReactiveVar();
}