流星 - 从助手那里改变DOM

Mco*_*ope 1 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
    }
})
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*don 5

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

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

尝试这样的东西:

Template.myTemplate.onRendered(function() {
  this.autorun(function() {
    if (MyCollection.findOne()) {
      do_some_rand_function();
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

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