2

我有一个看起来像这样的主干模型:

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.

4

3 回答 3

3

由于 Backbone 已经自带 underscore.js,所以使用它。在您的情况下,上下文可以绑定到区间函数_.bind

setInterval( _.bind( function(){this.refetch();}, this), 5000);

这是更好的方法,不仅因为它更短,而且因为它可以防止that别名在嵌套范围内可见,这可能导致各种难以捕获的错误。请参阅 idiomatic.js 样式指南,“Faces of this”部分:https ://github.com/rwldrn/idiomatic.js/

于 2012-12-02T09:22:31.700 回答
2

我想你现在在做什么,即

 function() {
var that = this;
setInterval(function(){
    that.refetch();
}, 5000);   
}

本身就是一个更好的方法。!!

于 2012-12-02T08:22:01.473 回答
1

this在您的区间内不存在。如果您需要访问任何内容this,则需要将其传递给闭包中的匿名函数,如下所示:

setInternval( (
  return function(obj){
     obj.refetch();
  }(this)

) , 5000)
于 2012-12-02T08:19:03.693 回答