【问题标题】:backbone.js 0.9.2 adding models with duplicate id's to a collection主干.js 0.9.2 将具有重复 ID 的模型添加到集合中
【发布时间】:2017-01-19 18:23:54
【问题描述】:

我遇到了一个问题,我的集合结合了两种不同的模型(文件夹和项目)。从服务器获取模型时,文件夹和项目可能具有相同的 id。在获取成功时,我使用来自服务器的结果调用 collection.reset 以便将项目添加到集合中,但这会导致其中一个模型被删除,因为它是重复的(collection.reset 调用 collection.add 并找到两个模型 ID 相同)。有什么东西(除了模型)我可以改变来解决这个问题吗?我知道 modelId 是在 1.2 中引入的,但我无法从 0.9.2 升级。

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    Backbone id 需要是唯一的,假设您打算维护具有重复 id 的数据,并且您不能更改服务器 API 中的属性名称,我建议您告诉 Backbone 使用不同的 ID。

    var Collection = Backbone.Collection.extend({
    	model: Backbone.Model.extend({
      	  idAttribute: '_id'
        })
    });
    
    var col = new Collection([{id: 1, name: 'a'},{id: 1, name: 'b'}]);
    
    $('#result').text(JSON.stringify(col.toJSON()));
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js"></script>
    <div id="result"/>

    如果您想要捕获从服务器返回的数据并协调重复的 ID,那么您可以使用 Model.parse 根据数据在 ID 前加上一些值(例如“文件夹-”和“项目- ”)。然后你打电话:

    collection.reset(mixedModels, {parse: true});
    

    【讨论】:

    • 尽可能使用现场堆栈 sn-ps 而非 jsfiddle 等非现场服务。
    • 出于好奇,您为什么不使用内置的“显示控制台”选项?
    • 我先用的是 JSFiddle,它没有控制台,真的没有什么特别的原因
    猜你喜欢
    • 2015-09-05
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2013-10-11
    • 1970-01-01
    • 2012-12-25
    • 2013-08-20
    相关资源
    最近更新 更多