我正在使用 Backbone Marionette 框架,我有这样的情况
这里每一行都是一个模型,这是一个保存联系人集合的 Marionette CollectionView。现在点击提交按钮,用户可以选择任意数量的联系人,当他点击提交时,我必须调用每个模型。那么最好的方法是什么。
首先,我不知道该怎么做。我知道如何在单个模型上调用 save 。我搜索了几个帖子,但他们没有提供解决方案。
我正在使用 Backbone Marionette 框架,我有这样的情况
这里每一行都是一个模型,这是一个保存联系人集合的 Marionette CollectionView。现在点击提交按钮,用户可以选择任意数量的联系人,当他点击提交时,我必须调用每个模型。那么最好的方法是什么。
首先,我不知道该怎么做。我知道如何在单个模型上调用 save 。我搜索了几个帖子,但他们没有提供解决方案。
您想要的是用户选择的所有模型的数组,因此您可以逐个访问这些模型。
您的问题有两种解决方案。当用户触发 onSelect 事件时,您可以
1)什么都不做
2) 保存对所选模型的引用
然后,当 onSubmit 事件发生时,根据您在上面选择的内容,您必须
(1)解析表格中每个视图的HTML,检查'checkbox'是否被选中,如果是,通过视图的model
属性访问模型
(2) 或者,由于您已经保存了一个包含对所选模型的引用的数组,您可以只迭代所述数组
代码必须驻留在哪里?
由于您想要访问在 Marionette.CollectionView 中呈现的所有模型,因此执行此操作的代码需要驻留在所说的 Marionette.CollectionView 中,因为只有在那里您才能访问所有这些模型。
如果您遵循方法 (2),即在选择事件时保存对选定模型的引用,则该代码需要驻留在相应模型的 Marionette.ItemView 中。
解决方案 (2) 示例
var selectedModels = [];
var ItemView = Marionette.ItemView.extend({
events: {
'click checkbox': function () {
selectedModels.push(this.model);
}
}
});
var CollectionView = Marionette.CollectionView.extend({
itemView: ItemView,
events: {
'click .submit': function () {
_( selectedModels ).invoke(someFunction);
}
}
});
您可能还需要记住,当您遍历选定模型的数组时,最好将整个数组传递到后端并在那里对其进行排序(保存每个模型)。这将帮助您减少对后端的调用量,使用户体验更加友好。