我有一个看起来像这样的骨干模型:
var myModel = Backbone.Model.extend({
watch : function() {
this.watcher = setInterval("this.refetch", 5000);
}
refetch : function() {
//do something
}
});
setInterval
方法实际上不起作用,因为我认为this.refetch
在setInterval
调用中无效。 setInterval("refetch", 5000);
也不起作用。
我现在正在做的是:
watch : function() {
var that = this;
setInterval(function(){
that.refetch();
}, 5000);
}
有没有更好的方法来执行此操作,因此我不需要使用that
。
答案 0 :(得分:3)
由于Backbone已经带了underscore.js,所以请使用它。在您的情况下,上下文可以与_.bind
:
setInterval( _.bind( function(){this.refetch();}, this), 5000);
这是更好的方法,不仅因为它更短,而且还因为它阻止了that
别名在嵌套作用域中可见,这可能导致各种难以捕获的错误。请参阅idiomatic.js样式指南,“Faces of this”部分:https://github.com/rwldrn/idiomatic.js/
答案 1 :(得分:2)
我认为你现在在做什么,即
function() {
var that = this;
setInterval(function(){
that.refetch();
}, 5000);
}
本身就是一种更好的方法。!!
答案 2 :(得分:1)
this
。如果你需要访问任何this
,你需要将它传递给闭包中的匿名函数,如下所示:
setInternval( (
return function(obj){
obj.refetch();
}(this)
) , 5000)