1
我在我的页面有3个单独的表,他们都得到填充视图初始化并从我的后端REST API获取他们的数据。获取数据后,我将复位绑定到名为paint
的方法,并在该循环内部通过集合并构建表。Backbone.js多表数据操作
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();
}
});
请注意,这是上述所有每项行动执行时工作正常,但如预期,当我wan't执行批量无法正常工作(包括所有/排除所有)操作。
这是排除我试图完成的所有方法的示例。
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;
}
}
我不知道你是怎么做到的更换,而人它就像一个魅力! –
强调['.reset()'](http://backbonejs.org/#Collection-reset)。 –
,因为在某些情况下,您会覆盖重置绑定,[.clone()](http://underscorejs.org/#clone)是首选方式。 –