我正在擴展Backbone.View以支持子視圖,我有一個addSubview
方法,它只是將一個Backbone視圖添加到一個散列。很簡單。我現在試圖讓它如此,只要你看到它破壞所有的子視圖。我認爲這將是很容易爲好,但我的方法在一個無限循環會:這是爲什麼遞歸併導致無限循環?
destroy: function() {
debugger;
// Call destroy on all subviews. If the subviews have subviews they'll
// be destroyed as well
for (var v in this._subviews) {
this._subviews[v].destroy();
}
// Instead of calling `delete` on every view we wipe everything out after
// we're done destroying all the views
this._subviews = {};
// Finally, since all the subviews are destroyed it's safe to destroy
// this view
this.remove();
},
會發生什麼事是,調試器被稱爲第一次和this
是視圖destroy
被稱爲(右) ,第二次在第一個子視圖上調用(右側),第三次 - 它仍然繼續調用第一個子視圖。播放通過一步一步的:
- 點擊調試
- 獲取到
this._subviews[v].destroy();
線和v
== 1子視圖 - 跳回到頂部調試器。
就是這樣。它永遠重複。任何想法或建議?
演示:http://jsbin.com/iyApuga/1/edit
你可以創建一個小提琴嗎? – thefourtheye
@thefourtheye在這裏你去:http://jsbin.com/iyApuga/1/edit –