2012-06-27 40 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