2015-12-02 74 views
0

从我能理解的官方文档中,函数作为参数传递到template.autorun应该在DOM中有更新时运行。Template.autorun()和Tracker.afterFlush()不起作用

但我没有发现它发生。

//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

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

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

你能告诉你如何设置你的发布和订阅吗?或者你在使用自动发布吗?

+0

感谢您的关注...我也怀疑这...然后我安装了'不安全'和'autopublish'来发现它是否与出版物和订阅有关...但结果是一样的 –

+0

做你每2秒在MongoDB中获得新记录?您的浏览器中的内容是否更新,并显示模板显示的计数? –

+0

是的,它确实.... –