現在、ビューのdestroy/removeメソッドを実装しようとしていますが、すべてのビューで機能する一般的なソリューションを取得することはできません。
コントローラーにアタッチするイベントがあることを期待していたので、新しいリクエストが来ると以前のビューが破棄されますthenは新しいビューをロードします。
各ビューの削除機能を構築せずにこれを行う方法はありますか?
すべての情報を知らずに...リセットトリガーをモデルまたはコントローラーにバインドできます。
this.bind("reset", this.updateView);
ビューをリセットする場合は、リセットをトリガーします。
コールバックのために、次のようなことをしてください:
updateView: function() {
view.remove();
view.render();
};
ビューが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);
}
私にはやり過ぎのように見えましたが、他のアプローチでは完全にうまくいくわけではありませんでした。
これは私が使ってきたものです。問題はありません。
destroy: function(){
this.remove();
this.unbind();
}
現在のBackboneドキュメントによると...
view.remove()
DOMからビューとそのelを削除し、stopListeningを呼び出して、ビューがlistenToしたバインドイベントを削除します。
これはうまくいくと思う
destroyView : function () {
this.$el.remove();
}
問題を解決する方法を使用できます!
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]);
}