Javascript 主干网';s fetch():仅向集合添加新的模型
当在初始Javascript 主干网';s fetch():仅向集合添加新的模型,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,当在初始fetch之后调用fetch时(响应用户的操作),许多新获取的模型可能与初始fetch中的现有模型相似。如果我使用add:true选项调用fetch,则集合中可能存在重复的模型 问题:不必从集合中删除所有现有模型(例如,id=1,2,3,4)并插入新获取的模型(id=1,2,3,5),而是可以执行以下两个操作: 仅添加新型号id=5,生成一个id=1,2,3,4,5的集合。然后仅渲染新视图(id=5) 添加新型号id=5,并删除在新fetch中找不到的型号(id=4)。然后呈现新视图(i
fetch
之后调用fetch
时(响应用户的操作),许多新获取的模型可能与初始fetch
中的现有模型相似。如果我使用add:true
选项调用fetch
,则集合中可能存在重复的模型
问题:不必从集合中删除所有现有模型(例如,id=1,2,3,4
)并插入新获取的模型(id=1,2,3,5
),而是可以执行以下两个操作:
id=5
,生成一个id=1,2,3,4,5的集合。然后仅渲染新视图(id=5
)id=5
,并删除在新fetch
中找不到的型号(id=4
)。然后呈现新视图(id=5
)并删除旧视图(id=4
)fetchNew()
函数代替调用App.listingCollection.fetch()
。这只适用于将新型号id=5
添加到集合中
在不重新渲染现有视图的情况下,如何仅渲染新视图(id=5
)而不重新渲染现有视图id=1,2,3,4
?我用newlistingmarkerview({model:item})行尝试了这一点
在ListingCollection
中,但是我在响应行var marker=L.marker([this.model.get('lat'),this.model.get('lng'))时收到一个错误代码>在列表MarkerView
中:
错误
Uncaught TypeError: Object #<Object> has no method 'get'
查看
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;
}
});
restful API不知道与之对话的客户端的状态,因此,当发出GET
请求以检索对象列表(例如)时,rest服务器应始终返回匹配对象的完整列表
在主干端,您只需使用服务器上的列表重置集合即可.reset
将清空集合,然后添加所有项目,如:
my_collection.fetch({success: function(collection, resp){
collection.reset(resp, {silent: true});
}});
这样你就不会发生碰撞,也不用担心任何事情。除非您在本地集合中更改的模型尚未保存回服务器
如果您正在寻找一种方法来防止修改集合中的本地项目,则需要类似于上面提到的巫术。更新:true
做您想做的事吗?``App.listingCollection.fetch({update:true})```
my_collection.fetch({success: function(collection, resp){
collection.reset(resp, {silent: true});
}});