ルートが変更されるたびに再レンダリングされるトップレベルの PageView があります。このページビューには、ネストされたサブビューが多数埋め込まれています。PageView を再レンダリングする場合、PageView とともにネストされたサブビューをすべて削除/アンバインドする必要がありますか、それとも PageView のみを削除/アンバインドする必要がありますか? すべてのサブビューを削除/アンバインドする必要がある場合、これを行うための最適な方法は何ですか?
ベストアンサー1
はい、適切に削除してバインドを解除する必要があります。
これを行う簡単な方法は、サブビューの配列を親ビューに保存することです。次に、close
親ビューのメソッドで、配列をループし、close
子ビューのメソッドを呼び出します。
ParentView = Backbone.View.extend({
initialize: function(){
this.childViews = [];
},
render: {
for (var i = 0; i < 10; i++){
var childView = new ChildView();
// do stuff with the child view
this.childViews.push(childView);
}
},
close: function(){
this.remove();
this.unbind();
// handle other unbinding needs, here
_.each(this.childViews, function(childView){
if (childView.close){
childView.close();
}
})
}
});
親ビューを削除または置き換える準備ができたら、必ず親ビューでメソッドを呼び出してくださいclose
。これにより、すべての子ビューが適切にクリーンアップされます (すべての子ビューに独自のclose
メソッドがあると仮定)。