Template.autorun()和Tracker.afterFlush()不起作用

时间:2015-12-02 13:58:25

标签: meteor meteor-blaze autorun

根据我从官方文档中可以理解的内容,只要template.autorun中有更新,就会运行作为参数传递给DOM的函数。

但我发现它没有发生。

//dummies.html
<template name="dummies" >
    {{#each dummies}}
        {{this.count}}&nbsp;
    {{/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();
    }
});

Line1Line2都只执行一次。每次Dummies.insert()被调用时,它们不应该被执行吗?

我的意思是,每当模板更新时都不应该调用它们吗?

如果我误解了文档,有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

您展示的代码看起来不错。是的,每次更改反应源时,都会重新运行autorun中的代码。由于Dummies集合是一个反应源,因此应该触发对集合中每个插入的重新运行。

我将您的代码复制到一个小项目中,它按预期工作。每2秒创建一个增加计数的新记录,并在控制台中显示第1行和第2行。新计数显示在模板中。

您能说明如何设置发布和订阅吗?或者您正在使用自动发布?