流星 - 从助手那里改变DOM

时间:2015-01-23 00:45:38

标签: meteor

从Meteor助手进行DOM更改是一种好习惯吗?我目前正依赖于一个javascript函数在Meteor助手中运行,这使得每次收集数据发生变化时都会运行该函数。

我知道有Tracker.autorun()但据我所知,Tracker.autorun()仅适用于Session变量,不适用于集合数据更改。

到目前为止,我目前的方式并没有让我失望或造成任何问题,但我不能100%确定这是否是Meteor的用途。

代码示例

Template.page_body.helpers({
    orange: function() {
        do_some_rand_function()
        return this.name
    }
})

此代码将确保每次this.name更改时都运行do_some_rand_function()(this.name是从Mongo Collection获取的变量,因此它是被动的)。

1 个答案:

答案 0 :(得分:5)

没有。助手不应该有副作用(例如手动更新DOM,修改数据库,发出HTTP请求等)。

您的描述听起来像是在渲染回调中添加template autorun的好用例。所有autoruns都是反应性计算,因此如果其中使用的任何反应变量发生变化(Session,Meteor.user,Collections等),它们将重新运行。

尝试这样的事情:

Template.myTemplate.onRendered(function() {
  this.autorun(function() {
    if (MyCollection.findOne()) {
      do_some_rand_function();
    }
  });
});

另请注意,模板销毁时会自动停止模板自动运行。