2012-02-08 9 views
0

初期化関数で取得されたコレクションがありますが、フェッチが返される前にビューをクリーンアップする必要がある場合は、成功および/またはエラーコールバックをバインド解除するにはどうすればよいですか?Backbone Collectionフェッチコールバックをアンバインドするにはどうすればよいですか?

ので、このようなコードを持つ:私はmyView.closeを呼び出すとき

Backbone.View.extend({ 
    initialize: function() { 
    this.collection = new MyColl(); 
    this.collection.fetch({ 
     success: this.successCallback, 
     error: this.errorCallback 
    }); 
    }, 
    close: function() { 
    // what goes here to keep successCallback and errorCallback from being called? 
    } 
}); 

は、()(別のビューを表示するには、この場合には)それをクリーンアップするために、私はsuccessCallbackを呼び出すことにしたくありません後で(ビュー "クリーンアップ"後)。

私が試してみた:

close: function() { 
    this.collection.unbind('reset'); 
} 

をしかし、コレクションはとてもアンバインドを助けていないようです、フェッチした後に、このイベントはその_callbacksで内部VARにリストされていないようです。

答えて

1

あなたはいつもちょうどthis.closeが呼び出されているかどうかをチェックthis.successCallbackとthis.errorCallbackへの論理フラグを追加できます。

Backbone.View.extend({ 
    initialize: function() { 
    this.collection = new MyColl(); 
    this.collection.fetch({ 
     success: this.successCallback, 
     error: this.errorCallback 
    }); 
    }, 
    close: function() { 
    // do stuff 
    this.closed = true; 
    }, 
    successCallback: function() { 
    if(this.closed) return; 
    //Do stuff 
    } 
}); 

代わりに、あなたは本当にこの中にあなたのイベントを設定すべきではありません方法。代わりに、次のような何かをするのであれば、はるかに「バックボーン・アイ」です:

Backbone.View.extend({ 
    initialize: function() { 
    this.collection = new MyColl(); 
    this.collection.bind('reset', this.SuccessCallback); 
    this.collection.bind('error', this.errorCallback); 
    }, 
    close: function() { 
    // do stuff 
    this.collection.unbind('reset', this.successCallback); 
    this.collection.unbind('error', this.errorCallback); 
    }, 
    successCallback: function() { 
    //Do stuff 
    } 
}); 
+0

十分に適切です。意味あり。余分な状態を保存する必要がなく、フェッチオプションから成功とエラーのコールバックをアンバインドするだけでよいでしょう。 – jaketrent

関連する問題