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});
    }});