我实例化了两个集合:项目和部分。
每个部分可以有多个项目,并且每个项目可以出现在多个部分中。
当我将一个项目添加到一个部分时,我想获取该项目的哈希值并将其保存到该部分的数组属性中。该数组属性用于确定每个部分中显示哪些项目。
假设我有一个包含 100 个项目的 ItemListModel,并且有一个带有“items”属性和数组 [ item3_id_hash、item27_id_hash、item59_id_hash ] 的部分。当我显示SectionView 时,我首先将这些哈希ID 映射到Items 集合以获取这些对象,然后创建一个仅显示这些对象的ItemsView。
我遇到的问题是在创建和删除时识别这些项目,以便我可以获得它们的 id 并从section.item 属性数组中添加/删除它们。
我可以想到一个黑客解决方案,通过设置一个名为“parent”的全局变量来在添加时识别该项目。但是我想避免使用全局变量。
删除完全是另一回事。当用户单击 X 删除 View 中的项目时,我不知道如何识别父部分的模型,或者至少识别其 ID。
示例 View :
- 第_1节
- 项目_1
- 项目_2
- 项目_3
- 第_2节
- 项目_4
- 项目_5
- 项目_6
如果用户从 View 中删除 Item_2,我如何获取Section_1.model.get('id'),以便获取section_1对象,然后从 'items' 数组属性中删除 Item_2 的 'id'第_1节
我能想到的唯一解决方案是当我为Section_1绘制ItemsView时将Section_1的“id”传递到HTML View 。这是黑客和脆弱的,所以我试图避免它。
仅供引用:SectionListView 实例化一个或多个SectionsView,每个SectionsView 实例化一个ItemListView,ItemListView 实例化一个或多个ItemView
最佳答案
您应该始终返回到模型。如果您想删除某个项目,请将其从模型列表中删除,并让不同的 View 监听删除事件。
因此,您的部分正在观察 List 删除事件并采取相应的行动(删除页面上的元素或完全重新渲染它自身)。
在大多数情况下,模型和事件(或者路线)应该优先于粘合代码。
我希望我理解你的问题。
关于javascript - Backbone.js:如何在事件发生时识别父 View 的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4321003/