以下是我的JSON:
[
{
"id" : "1",
"type" : "report"
},
{
"id" : "2",
"type" : "report"
},
{
"id" : "1",
"type" : "email"
},
]
考虑一下,json从骨干集合中返回 - >服务电话。 现在,当我使用json响应使用骨干视图和把手模板系统渲染我的html表时。 显示2行,而不是3行。
注意:
集合Parse响应返回正确的json(即3行)。
当我使用具有唯一随机生成数字的集合解析覆盖id
时,将显示所有3行。
这不行,因为我不想更改id
。
我希望该行显示如下:
1 reports
2 reports
1 email
答案 0 :(得分:2)
来自Collection add的文档,
请注意,将相同的模型(具有相同ID的模型)添加到a 不止一次收集是一种无操作。
虽然我看不出为什么两个不同的对象应具有相同ID的原因,但您可能有正当理由。一个建议是在json响应_dummyId
中为每个对象添加另一个属性,并将其设置为服务器端的自动增量值。在客户端,在您的模型定义代码中,然后将idAttribute
设置为_dummyId
。
JSON响应,
[
{
"id" : "1",
"_dummyId": "1",
"type" : "report"
},
{
"id" : "2",
"_dummyId": "2",
"type" : "report"
},
{
"id" : "1",
"_dummyId": "3",
"type" : "email"
},
]
您的模型定义from http://backbonejs.org/#Model-idAttribute,
var Meal = Backbone.Model.extend({
idAttribute: "_dummyId"
});
那就是说,我希望骨干中有一个优雅的设置,这使得骨干集合成为列表而不是集合。
答案 1 :(得分:1)
如果要解决此问题,则必须为添加到集合的每个模型设置新的唯一ID。 试试这个方法:
initialize: function() {
this.set("id", this.generateID());
},
generateID = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
如果您需要原始ID,则需要先保存它,然后在创建新ID之后,将原始设置在另一个模型属性中。
当我将@ amith-george解决方案idAttribute
设置为另一个dummyId