从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获取的变量,因此它是被动的)。
答案 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();
}
});
});
另请注意,模板销毁时会自动停止模板自动运行。