我正在使用 ember-data 的装置适配器加载 App.Structure 对象。这些对象将 App.Overlay 对象嵌入为 hasMany
关系,如下所示:
App.Structure = DS.Model.extend({
name: DS.attr('string'),
// hash of overlay paths
overlays: DS.hasMany('App.Overlay', { embedded: true }),
});
App.Overlay = DS.Model.extend({
view: DS.attr('string'),
path: DS.attr('string')
});
App.Overlay.FIXTURES = [];
App.Structure.FIXTURES = [{
"id": 0,
"name": "Test Structure",
"overlays": [{
"view": "Isometric",
"path": "[elided to save space]"
}],
}];
(请注意,空的 fixtures 数组是为了修复 this issue 。)
现在我可以加载
App.Structure
,但我无法从中得到任何东西。见 this jsfiddle ;可以访问 Structure,并且可以遍历 overlays
数组,但数组中的对象是空 shell ,其中没有任何内容。这是一个控制台 session :
> currStructure = App.fixtureStore.findAll(App.Structure).get('firstObject');
Class
> currStructure.get('name');
"Test Structure"
> currStructure.get('overlays').get('length');
1
> var overlay = currStructure.get('overlays').get('firstObject');
undefined
> overlay instanceof App.Overlay;
true
> overlay.get('view');
null
> overlay.get('path');
null
为什么这不起作用?
ETA:按照@Kristaps 的回复,我已经更新了 fiddle 。现在第一个 Overlay 仍然只是一个空 shell ,但任何后续的叠加层都不是。嗯?
最佳答案
我猜这是因为您没有在覆盖对象中设置 structure_id 并在覆盖对象中设置belongsTo 关系。见 fiddle
http://jsfiddle.net/kristaps_petersons/REtNV/
App.Structure = DS.Model.extend({
id: DS.attr('number'),
name: DS.attr('string'),
overlays: DS.hasMany('App.Overlay', {embedded: true})
});
App.Overlay = DS.Model.extend({
id: DS.attr('number'),
vi: DS.attr('string'),
pa: DS.attr('string'),
structure: DS.belongsTo('App.Structure'),
});
和固定装置:
App.Overlay.FIXTURES = [];
App.Structure.FIXTURES = [
{
"id": 0,
"name": "Test Structure 0",
"overlays": [{
"id": 0,
"structure_id": 0,
"vi": "Overlay view 0.0",
"pa": "Overlay path 0.0"},
{
"id": 1,
"structure_id": 0,
"vi": "Overlay view 0.1",
"pa": "Overlay path 0.1"},
{
"id": 2,
"structure_id": 0,
"vi": "Overlay view 0.2",
"pa": "Overlay path 0.2"}
]},
{
"id": 1,
"name": "Test Structure 1",
"overlays": [{
"id": 3,
"structure_id": 1,
"vi": "Overlay view 1.0",
"pa": "Overlay path 1.0"},
{
"id": 4,
"structure_id": 0,
"vi": "Overlay view 1.1",
"pa": "Overlay path 1.1"},
{
"id": 5,
"structure_id": 0,
"vi": "Overlay view 1.2",
"pa": "Overlay path 1.2"}
]},
{
"id": 2,
"name": "Test Structure 2"}
];
关于ember.js - 为什么我的嵌入式 hasMany 关系未定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12220962/