2014-04-20 40 views
0

經驗:新手聽週期性變化在Backbone.js的

我有初始化函數這樣

initialize: function(){ 
     this.listenTo(this.model, "change", this.asyncRender); 
    } 

我要聽的週期性變化,像每5秒

我想要這樣的東西

setTimeout(function(){ 
      this.listenTo(this.model, "change", this.asyncRender); 
     }, 5000); 

如何做到這一點?

更新:

這是拋出錯誤updateValues not defined

initialize: function(){ 
     this.listenTo(this.model, "change", this.asyncRender); 
     setInterval(function(){ 
      this.listenTo(this.model, "change", this.updateValues); 
      console.log("3 seconds"); 
     },3000) 
    }, 

這不是引發錯誤

initialize: function(){ 
     this.listenTo(this.model, "change", this.asyncRender); 
     this.listenTo(this.model, "change", this.updateValues); 

    }, 

回答

1

你沒有定期傾聽。您只需在初始化中註冊一次。如果模型中有任何更改,則會調用this.asyncRender。

此處更改表示設置或刪除或修改的任何屬性。

嘗試調用

this.model.set("title", "A Scandal in Bohemia"); 

,看看this.asyncRender被調用。

編輯: 如果你想手動輪詢每5分鐘,那麼你可以檢查this.model.changed屬性。但這不是可取的。

http://backbonejs.org/#Model-changed

initialize: function() { 
    var self = this; 
    window.setInterval(function() { 
    if (self.model.changed) { 
     // Do your stuff 
     // this.asyncRender(); 
    } 
    }, 5000); 
} 
+0

我要聽爲每5秒,在我應用程序,更改發生在每一毫秒,我不想每次都執行此操作,我只想在5秒後執行 – Sasikanth

+0

您可以設置Timeout來檢查this.model.changed屬性。如果這是真的,那麼模型就會改變。檢查http://backbonejs.org/#Model-changed – Bharathwaaj

+0

是的,你可以發佈樣本代碼 – Sasikanth

1

然後,你不必註冊model.change事件......

只是做

setTimeout(this.asyncRender, 5000);