2013-03-20 30 views
1

如果你看一下在開發工具的待辦事項應用程序,一個新的ToDoView是內APPVIEW每次創建一個新的待辦事項(模型)創建的。但是我沒有看到ToViews的「集合」。我問這是因爲我認爲一個視圖在模型被銷燬時被銷燬,但無法找到參考。 謝謝都是骨幹訪問量持續

回答

0

視圖通常是內存中的結構(如DOM本身),所以只要你的JavaScript代碼持有對它們的引用(因此使它們不適合瀏覽器的JS引擎進行垃圾回收),它們將繼續存在。關上窗戶,他們走了。點擊指向不同頁面的鏈接,它會進行整頁加載,然後他們就消失了。

然而,視圖不自動響應被破壞的典範。如果您希望模型在通過骨幹刪除時從DOM中消失,您必須手動連接this.listenTo(this.model, 'destroy', this.remove.bind(this))之類的東西。另外,正如你已經注意到的,當你想渲染一個模型集合,爲每個模型創建一個新視圖,渲染它,然後不保留對其的引用時,這很常見。當集合發生變化時,最外層的元素被清空,新的視圖實例被創建和渲染,因此舊的視圖實例有資格進行自動垃圾收集。因此,JavaScript將清理那些舊的視圖,但這不會對相應的模型產生任何影響,也不會觸發任何AJAX請求。

+0

仍然困惑。如果模型數據更改視圖必須更新。如果它不再存在,它會如何更新?看來,模型是唯一可以在這裏迭代的真實對象。 – mike628 2013-03-20 00:44:44

+0

視圖仍然「真的存在」,並且如果您的事件已正確連接,那麼當模型的數據更改時,該模型的視圖將響應這些事件並相應地更新其DOM元素。事情有一次,視圖有對其模型的引用,通常沒有任何令人信服的理由來保存視圖列表,因爲如果您只是操作模型,則事件綁定將執行視圖並且視圖將自動更新。所以如果你喜歡,你可以繼續引用你的觀點,有時候你需要,但是你經常不需要。也許別人可以更好地解釋 – 2013-03-20 00:58:29