【问题标题】:Fetch issues in backbone collection with id使用 id 获取主干集合中的问题
【发布时间】:2013-01-30 04:16:20
【问题描述】:

以下是我的 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

【问题讨论】:

标签: javascript jquery backbone.js underscore.js handlebars.js


【解决方案1】:

来自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"
});

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

【讨论】:

    【解决方案2】:

    如果您想解决这个问题,您必须为添加到集合中的每个模型设置新的唯一 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属性中设置原。 当我将 @amith-george 解决方案设置 idAttribute 设置为另一个 dummyId 时,Backbone 忽略了我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多