我有一个 Collection App.listingList
,随后fetch()
用add:true
.
App.listingList.fetch({
data: {some:data},
processData: true,
add: true
});
问题:新添加的模型如何在不重新渲染现有模型的视图的情况下渲染它们的视图。这意味着我不能这样做:
this.collection.each( function(listing, index) {
new ListingMarkerView({ model:listing }).render();
}, this);
尝试#1
在集合add
事件上渲染视图,我无法找到一种方法来访问要渲染的新模型
ListingListView = Backbone.View.extend({
initialize: function() {
this.collection.bind('add', this.renderNew, this);
},
render: function() {
console.log('render ListingListView');
this.collection.each( function(listing, index) {
new ListingMarkerView({ model:listing }).render();
}, this);
return this;
},
renderNew: function() {
// How do I grab the new models?
new ListingMarkerView({ model:listing }).render(); // wont work
return this;
}
});
尝试#2
我尝试使用第二个 Collection 来执行后续fetch
操作,并使用 underscore.js 比较两个集合的模型_.without()
,但返回的数组仍然包含在作为参数传递的第二个数组中找到的元素。Using_difference()
还返回与第一个数组传递的相同数组。
App.listingListNew.fetch({
data: {some:data},
processData: true,
success: function() {
console.log(App.listingListNew.models);
console.log(App.listingList.models);
console.log(_.without(App.listingListNew.models, App.listingList.models));
console.log(_.difference(App.listingListNew.models, App.listingList.models));
}
});
console.log
输出
由于我将 2 个相同的数组传入_.difference()
and _.without()
,因此输出应该是[]
. 但它不是 :/ 也许是因为cid
不同,所以它们中的每一个都被视为独一无二的?