使助手对事件做出反应

Cause helper to react to event

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

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.

如何使助手从事件中重新处理?

在您想要为 ReactiveVar 对象设置值的事件中。 在 helpers 中,您只需 return 这个对象的值,helpers 的行为就像 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();
}