2013-02-14 111 views
0

以下是我的JSON:取骨干收集问题id为

[ 
{ 
    "id" : "1", 
    "type" : "report" 
}, 
{ 
    "id" : "2", 
    "type" : "report" 
}, 
{ 
    "id" : "1", 
    "type" : "email" 
}, 
] 

考虑,JSON是从骨干网收集回来 - >服务呼叫。 现在,当我使用json响应呈现我的html表格使用骨干视图和句柄模板系统。 显示2行,而应该有3行。

注意: 集合分析响应正在返回正确的json(即3行)。 当我使用具有唯一随机生成号码的集合解析覆盖id时,所有3行都显示出来。 这不好,因为我不想更改id

我要显示的行如下:

1 reports 
2 reports 
1 email 
+0

尝试改变idAttribute [提示这里:骨干API(http://backbonejs.org/#Model-idAttribute) – marbor3 2013-02-14 11:18:18

回答

2

Collection add文档,

注意添加相同的模型(具有相同ID的模型)的 不止一次收集是没有任何操作的。

虽然我看不出为什么两个不同的对象应该有相同的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" 
}); 

这就是说,我希望有骨干优雅的环境,这是令骨干集合行为清单而不是一套。

+0

由于它的工作。 .. – 2013-02-14 14:32:03

1

如果您想解决这个问题,您必须为每个添加到集合的模型设置新的唯一ID。如果您需要原始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); 
    }); 
} 

,你需要前将其保存,并创建新的后,您将原来在另一个模型属性: 试试这个方法。 骨干不理我,当我做@ amith乔治·溶液凝固idAttribute另一个dummyId