現在、ビューのdestroy / removeメソッドを実装しようとしていますが、すべてのビューで機能する一般的なソリューションを取得できません。
コントローラーにアタッチするイベントがあることを期待していたので、新しいリクエストが届くと、以前のビューが破棄されてから、新しいビューが読み込まれます。
ビューごとに削除関数を作成せずにこれを行う方法はありますか?
現在、ビューのdestroy / removeメソッドを実装しようとしていますが、すべてのビューで機能する一般的なソリューションを取得できません。
コントローラーにアタッチするイベントがあることを期待していたので、新しいリクエストが届くと、以前のビューが破棄されてから、新しいビューが読み込まれます。
ビューごとに削除関数を作成せずにこれを行う方法はありますか?
ビューが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.bind("reset", this.updateView);
ビューをリセットする場合は、リセットをトリガーします。
コールバックについては、次のようにします。
updateView: function() {
view.remove();
view.render();
};
私はパーティーに遅れていることを知っていますが、これが他の誰かに役立つことを願っています。バックボーンv0.9.9+を使用している場合は、を使用できますlistenTo
。stopListening
initialize: function () {
this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.remove);
}
これは私が使ってきたものです。問題は発生していません。
destroy: function(){
this.remove();
this.unbind();
}
現在のバックボーンのドキュメントによると...
view.remove()
ビューとそのelをDOMから削除し、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]);
}