2015-12-02 67 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

是的,它確實.... –