Backbone.js:如何在事件中识别父视图的模型?

时间:2010-12-01 03:43:47

标签: javascript javascript-events backbone.js

我实例化了两个集合:items和sections。

每个部分可以有多个项目,每个项目可以出现在多个部分中。

当我向一个部分添加一个项目时,我想获取该项目的哈希并将其保存到该部分的数组属性中。此数组属性用于确定每个部分中显示的项目。

所以,假设我有一个包含100个项目的ItemListModel,并且我有一个带有'items'属性的部分,其中包含数组[item3_id_hash,item27_id_hash,item59_id_hash]。当我显示SectionView时,我首先将这些哈希id映射到Items集合以获取这些对象,然后创建一个仅显示那些对象的ItemsView。

我遇到的问题是在创建和删除时识别这些项目,以便我可以获取它们的ID并在section.item属性数组中添加/删除它们。

通过设置一个名为parent的全局变量,我可以想到一个在添加时识别项目的hackish解决方案。但我想避免使用全局变量。

完全删除是另一回事。当用户单击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对象,然后从'items'数组属性中删除Item_2的'id'。 Section_1

我能想到的唯一解决方案是在为Section_1绘制ItemsView时将Section_1的'id'传递给HTML视图。这是hackish和脆弱所以我试图避免它。

FYI:SectionListView实例化一个或多个SectionsViews,每个SectionsViews实例化一个ItemListView,它实例化一个或多个ItemViews

1 个答案:

答案 0 :(得分:1)

你应该总是回到模特身上。如果要删除项目,请将其从模型列表中删除,并让不同的视图侦听删除事件。

因此,您的部分正在观察List remove事件并相应地执行操作(删除页面上的元素或完全重新呈现它)。

在大多数情况下,模型和事件(或者路由)应该首选粘合代码。

我希望我理解你的问题。