Javascript Backbone.js多表数据操作
在我的页面中有3个单独的表,它们都在视图初始化和从我的后端RESTAPI获取数据时被填充。获取数据后,我将reset绑定到名为Javascript Backbone.js多表数据操作,javascript,backbone.js,backbone-events,dom-manipulation,backbone.js-collections,Javascript,Backbone.js,Backbone Events,Dom Manipulation,Backbone.js Collections,在我的页面中有3个单独的表,它们都在视图初始化和从我的后端RESTAPI获取数据时被填充。获取数据后,我将reset绑定到名为paint的方法,并在该循环中遍历集合并构造表 paintSelected: function (collection, options) { collection.each(function (ch) { var view = new ChannelViewDetailed({model: ch}); view.setOwner(
paint
的方法,并在该循环中遍历集合并构造表
paintSelected: function (collection, options) {
collection.each(function (ch) {
var view = new ChannelViewDetailed({model: ch});
view.setOwner(collection);
this.$el.find('#selected tr:eq(' + collection.indexOf(ch) + ')').after(view.render().el);
}, this);
},
这将在我定义的下划线模板上构造整个表。现在一切都很好,我可以处理在这个页面上的多个集合之间删除和添加数据
当我想在此表上执行exclude all
或include all
操作时,事情会变得一团糟,视图所有者会因为我必须进行的循环而丢失,列表中会出现重复项,并且顺序也会丢失
ChannelViewDetailed = Backbone.View.extend({
tagName: 'tr',
template: _.template($('#tpl-channel-row-detailed').html()),
events: {
'click td.del': 'deleteSelected'
},
setOwner: function (collection) {
this.owner = collection;
},
render: function () {
this.$el.html(this.template(this.model.toJSON()));
return this;
},
deleteSelected: function (e) {
e.preventDefault();
this.owner.remove(this.model);
this.remove();
}
});
请注意,当执行每项操作时,上面提到的所有操作都可以正常工作,但当我不想执行批处理(包括所有/排除所有)操作时,这些操作就不能正常工作
这是我试图实现的排除所有方法的一个示例
excludeAllChannels: function (e) {
e.preventDefault();
var self = this;
if (!$.isEmptyObject(self.selected)) {
_.each(this.selected.models, function (item, index, items) {
self.selected.remove(item);
});
$('#in-channels tr').has('td').remove();
unsavedState = true;
}
}
修改当前正在循环的数组可能会导致意外结果 可替换为以下任一项:
_.each(_.clone(a.models), function(item) { a.remove(item); });
a.remove(a.models);
a.reset();
我不知道你是怎么做到的,但伙计,它就像一个符咒!因为在某些情况下,重写重置绑定是首选方法。
_.each(_.clone(a.models), function(item) { a.remove(item); });
a.remove(a.models);
a.reset();