2012-06-27 37 views
4

我試圖從setInterval內訪問this.collection。但是,這不受限制。我似乎無法弄清楚如何綁定它,以便this可以訪問該集合,而不是setInterval對象。Backbone.js將其綁定到setInterval

這是我的視圖中的一個片段。

initialize: function(){ 
    _.bindAll(this); 
}, 
start: function() { 
    setInterval(function() { 
    this.collection.each(function(item) { 
     console.log(item.id); 
    }); 
    }, 5000); 
} 

有什麼建議嗎?

回答

8

,當你建立回調應該bind()this您需要的值:

setInterval(function() { 
    this.collection.each(function(item) { 
     console.log(item.id); 
    }); 
}.bind(this), 5000); 

不要忘了包括上述MDN頁面墊片,如果你需要IE8的兼容性。

+0

完美,謝謝!那只是爲了這種綁定的方法,反對強調綁定? – dzm

+0

@dave不知道。兩者的源代碼看起來或多或少相似。 – millimoose

+0

好的,謝謝,我會測試一下。 – dzm

4

你可以這樣做:

initialize: function(){ 
    _.bindAll(this); 
}, 
afterInterval: function() { 
    this.collection.each(function(item){ 
    console.log(item.id); 
    }); 
}, 
start: function() { 
    setInterval(this.afterInterval, 5000); 
} 

afterInterval現在是一個回調函數,它有訪問視圖的this