2010-12-01 75 views
1

我有兩個集合實例:項目和部分。Backbone.js:如何在事件中識別父視圖的模型?

每個部分可以有多個項目,每個項目可以出現在多個部分中。

當我將項目添加到節中時,我想獲取該項目的散列並將其保存到節的數組屬性中。此數組屬性用於確定在每個部分中顯示哪些項目。

所以,假設我有一個ItemListModel有100個項目,並且我有一個'item'屬性與數組[item3_id_hash,item27_id_hash,item59_id_hash]的部分。當我顯示SectionView時,我首先將這些散列ID映射到Items集合以獲取這些對象,然後創建一個僅顯示這些對象的ItemsView。

我遇到的問題是在創建時刪除這些項目,以便我可以獲取它們的ID並將它們從section.item屬性數組中添加/刪除。

我可以想象一個駭客解決方案,通過設置一個名爲parent的全局變量來標識添加的項目。但是我想避免使用全局變量。

刪除完全是另一回事。當用戶單擊X來刪除視圖中的項目時,我無法弄清楚如何識別父節的模型,或者至少標識其ID。

實施例視圖:

  • Section_1
    • ITEM_1
    • ITEM_2
    • ITEM_3
  • Section_2
    • ITEM_4
    • Item_5
    • Item_6

如果用戶從視圖中刪除ITEM_2,我怎麼能得到Section_1.model.get( 'ID'),所以我可以得到section_1對象,然後刪除'Section'_1中的'items'數組屬性的Item_2的'id'

我能想到的唯一解決方案是在爲Section_1繪製ItemsView時將Section_1的'id'傳遞給HTML視圖。這是hackish和脆弱的,所以我試圖避免它。

FYI:SectionListView實例化一個或多個SectionsViews,每個實例化一個ItemListView,其中實例化一個或多個ItemViews

回答

1

你應該總是回到模型。如果你想刪除一個項目,然後將其從模型列表中刪除,並讓不同的視圖監聽刪除事件。

因此,您的部分正在觀察List刪除事件並相應地採取行動(刪除頁面上的元素或將其自身完全重新渲染)。

在大多數情況下,應該首選模型和事件(或者路由)來粘合代碼。

我希望我能理解你的問題。

+0

鑑於我非常具體的用例,我沒有看到我可以如何回到模型中的部分。基本上我試圖創造的是相當於「符號鏈接」。我只希望該部分保存到添加到它的項目的符號鏈接。我不希望這些部分自己包含這些項目,因爲同一個項目可以存在於多個部分中。如何在單個Section模型中保存對項目模型的引用? – 2010-12-01 16:02:28