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スタイルガイドの「この面」セクションを参照してください: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 に答える