当fetch
在 initial 之后调用 a (响应用户的操作)fetch
时,许多新获取的模型可能与 initial 中的现有模型相似fetch
。如果我fetch
使用该add: true
选项调用,则集合中可能存在重复的模型。
问题:不是id=1,2,3,4
从集合中删除所有现有模型(例如 with )并插入新获取的模型(id=1,2,3,5
),是否可以执行以下 2 个操作:
仅添加新模型
id=5
,从而生成带有id=1,2,3,4,5
. 然后只渲染新的 Views (id=5
)添加新模型
id=5
并删除新模型中未找到的模型fetch
(id=4
)。然后渲染新视图(id=5
)并删除旧视图(id=4
)
试图:
不是调用App.listingCollection.fetch()
,而是fetchNew()
使用函数。这仅适用于将新模型添加id=5
到集合中。
如何在id=5
不重新渲染现有视图的情况下触发仅 ()的新视图的渲染id=1,2,3,4
?new ListingMarkerView({ model:item }).render();
我用里面的行试过这个ListingCollection
,但是我得到一个错误来响应里面的var marker = L.marker([this.model.get('lat'), this.model.get('lng')]);
行ListingMarkerView
:
错误
Uncaught TypeError: Object #<Object> has no method 'get'
收藏
ListingCollection = Backbone.Collection.extend({
model: Listing,
url: '/api/search_by_bounds',
fetchNew: function(options) {
options = options || {};
var collection = this,
success = options.success;
options.success = function(resp, status, xhr) {
_(collection.parse(resp, xhr)).each(function(item) {
// added this conditional block
if (!collection.get(item.id)) {
collection.add(item, {silent:true});
new ListingMarkerView({ model:item }).render();
}
});
if (!options.silent) {
collection.trigger('reset', collection, options);
}
if (success) success(collection, resp);
};
return (this.sync || Backbone.sync).call(this, 'read', this, options);
}
});
看法
ListingMarkerView = Backbone.View.extend({
render: function() {
var marker = L.marker([this.model.get('lat'), this.model.get('lng')]);
markers.addLayer(marker);
},
close: function() {
this.unbind;
}
});