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)是首選方式。 –