根据我从官方文档中可以理解的内容,只要template.autorun
中有更新,就会运行作为参数传递给DOM
的函数。
但我发现它没有发生。
//dummies.html
<template name="dummies" >
{{#each dummies}}
{{this.count}}
{{/each}}
</template>
//dummies.js
Template.dummies.onRendered(function(){
var counter = 0;
setInterval(function(){
Dummies.insert({count: counter++})
}, 2000);
this.autorun(function(){
console.log("From autorun:", Dummies.find().count()) //--->Line1
Tracker.afterFlush(function(){
console.log("From afterFlush:", Dummies.find().count()) //--->Line2
});
});
});
Template.dummies.helpers({
dummies: function(){
return Dummies.find();
}
});
Line1
和Line2
都只执行一次。每次Dummies.insert()
被调用时,它们不应该被执行吗?
我的意思是,每当模板更新时都不应该调用它们吗?
如果我误解了文档,有没有办法实现这个目标?
答案 0 :(得分:1)
您展示的代码看起来不错。是的,每次更改反应源时,都会重新运行autorun中的代码。由于Dummies集合是一个反应源,因此应该触发对集合中每个插入的重新运行。
我将您的代码复制到一个小项目中,它按预期工作。每2秒创建一个增加计数的新记录,并在控制台中显示第1行和第2行。新计数显示在模板中。
您能说明如何设置发布和订阅吗?或者您正在使用自动发布?