backbone.js 0.9.2将具有重复id的模型添加到集合中

时间:2017-01-19 18:23:54

标签: javascript backbone.js

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

1 个答案:

答案 0 :(得分:2)

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"/>
&#13;
&#13;
&#13;

如果您希望捕获从服务器返回的数据并协调重复的ID,那么您可以使用Model.parse为ID添加一些值,具体取决于数据(例如&#34;文件夹 - &#34;和&#34; item - &#34;)。然后你打电话:

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