0

以下是我的 JSON:

[ 
{  
    "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
4

2 回答 2

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"
},
]

您的模型定义,来自 http://backbonejs.org/#Model-idAttribute

var Meal = Backbone.Model.extend({
  idAttribute: "_dummyId"
});

也就是说,我确实希望骨干中有一个优雅的设置,使骨干集合充当列表而不是集合。

于 2013-02-14T11:43:00.840 回答
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,需要先保存,新建后,在另一个model属性中设置原id。当我将 @amith-george 解决方案设置idAttribute为另一个时,主干忽略我dummyId

于 2015-12-18T08:39:52.433 回答