現在、ビューのdestroy / removeメソッドを実装しようとしていますが、すべてのビューで機能する一般的なソリューションを取得できません。
私は、コントローラに接続するイベントがあるだろう期待していたので、それが前のビューを破棄して新しい要求が来たときに、次に新しいものをロードします。
ビューごとに削除関数を作成せずにこれを行う方法はありますか?
現在、ビューのdestroy / removeメソッドを実装しようとしていますが、すべてのビューで機能する一般的なソリューションを取得できません。
私は、コントローラに接続するイベントがあるだろう期待していたので、それが前のビューを破棄して新しい要求が来たときに、次に新しいものをロードします。
ビューごとに削除関数を作成せずにこれを行う方法はありますか?
回答:
すべての情報を知らなくても...リセットトリガーをモデルまたはコントローラーにバインドできます。
this.bind("reset", this.updateView);
ビューをリセットする場合は、リセットをトリガーします。
コールバックについては、次のようにします。
updateView: function() {
view.remove();
view.render();
};
this.remove()
呼び出しthis.stopListening()
とthis.$el.remove()
。1つ目は、を使用して追加されたすべてのイベントリスナーを削除しthis.listenTo(...)
ます。2つ目は、jQueryを使用して追加したすべてのイベントリスナーを削除します。2つの間では、イベントリスナーを追加する他の手段を使用しない限り、カバーする必要があります。したがって、この答えは正しく、私から+1を取得します。
ビューがDOMから削除されただけでなく、イベントから完全に解放されたことを絶対に確認する必要がありました。
destroy_view: function() {
// COMPLETELY UNBIND THE VIEW
this.undelegateEvents();
this.$el.removeData().unbind();
// Remove view from DOM
this.remove();
Backbone.View.prototype.remove.call(this);
}
私にはやり過ぎのように見えましたが、他のアプローチでは完全にはうまくいきませんでした。
this.$el
代わりに使用する必要があり$(this.el)
ますが;)
this.remove()
か?
これでうまくいくと思います
destroyView : function () {
this.$el.remove();
}
this.stopListening()
し、次にreturn this
良い測定のために
あなたは問題を解決する方法を使うことができます!
initialize:function(){
this.trigger('remove-compnents-cart');
var _this = this;
Backbone.View.prototype.on('remove-compnents-cart',function(){
//Backbone.View.prototype.remove;
Backbone.View.prototype.off();
_this.undelegateEvents();
})
}
別の方法:次のようにグローバル変数を作成します。_global.routerList
initialize:function(){
this.routerName = 'home';
_global.routerList.push(this);
}
/*remove it in memory*/
for (var i=0;i<_global.routerList.length;i++){
Backbone.View.prototype.remove.call(_global.routerList[i]);
}