强制 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。
我希望 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。