强制 hasmany 具有相同的 ids(或者 ids ember 不知道)

force hasmany with same ids (or ids ember doesn't know about)

我希望 ember 列出 {{#each foo}} 上的所有 foo,即使 ID 相同。

这是我的模型。

App.Item = DS.Model.extend({
  title: DS.attr("string"),
  foo: DS.hasMany("foo", {async: true})
});

App.Foo = DS.Model.extend({
  bar: DS.attr("string")
});

假设 foo 是 foo: [1] 并且 json 响应是:

{
  "foos": [{
    "id": 1,
    "bar": "But is it _lightweight_ omakase?"
  },
  {
    "id": 1,
    "bar": "I for one welcome our new omakase overlords"
  },
  {
    "id": 1,
    "bar": "Put me on the fast track to a delicious dinner"
  }]
}

Ember 只列出最后一个对象而不是每个人。我知道 ember 想要不同的 ID,但是有没有办法强制 ember 列出所有具有相同 ID 的对象?

我正在使用 ember 数据,这是一个只读应用程序。

编辑

对象上的不同 ID 仍然无法正常工作。 Foo 仍然只能有 1: foo:[1] 。这就是问题所在。

我的问题是我无法列出 foo 上的所有 ID。所以我需要一种方法让 ember 显示请求返回的任何内容,无论它是否知道 ID。

I know that ember wants different ids, but is there a way to force ember to list all objects with same ids?

简短的回答是否定的。 ID 是标识符,特别是具有 Ember 数据的 唯一 标识符。不能有两个具有相同类型和 ID 的对象。给他们不同的 ID,一切都会正常。

我建议您真正注意多元化,这会让事情变得更加清晰。

我真的不明白你想在这里做什么,但我建议它可能是这两件事之一。

a) 每个 "item" 有很多 "foos"。在这种情况下,我会稍微改变一下:

App.Item = DS.Model.extend({
  title: DS.attr("string"),
  foos: DS.hasMany("foo", {async: true})
});

App.Foo = DS.Model.extend({
  bar: DS.attr("string")
  item: DS.belongsTo('item', {async: true})
});

并从服务器获取每个 "foo"。

{
  "foos": [{
    "id": 1,
    "bar": "But is it _lightweight_ omakase?"
  },
  {
    "id": 2,
    "bar": "I for one welcome our new omakase overlords"
  }...

然后您可以显示每个 "foo" 的 "bar":

{{#each item in model}}
    {{item.title}}
    {{#each foo in item.foos}}
        {{foo.bar}}

b) 如果每个 "item" 只有一个 "foo" 你仍然需要不同的 ID,除非你只保留那个并更新它。如果它很重要,也许可以保留一个单独的存档 table?否则可能会在您的 "foo" 模型中沿 "isCurrent" 或 "isValid" 行维护一个额外的属性。我承认我不知道这里有什么最佳实践。

Have you considered switching to a URL based model... – GJK

这正是我所追求的。我没注意到 findHasMany method in my search. More info here.

而不是 foo: [1] 使用 links: { foo: "http://example.org/foo/1" } 并且 ember 将列出 foo 而不必列出 foo 上的所有 ID。