4

ember-dataのフィクスチャアダプタを使用してApp.Structureオブジェクトをロードしています。hasManyこれらのオブジェクトには、次のように、関係としてApp.Overlayオブジェクトが埋め込まれています。

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

(空のフィクスチャ配列はこの問題を修正するためのものであることに注意してください。)

これで、をロードできますがApp.Structure、そこから何も取得できません。このjsfiddleを参照してください; 構造体にアクセスでき、配列を反復処理できますoverlaysが、配列内のオブジェクトは中空のシェルであり、何も含まれていません。

これがコンソールセッションの選択です。

> 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の応答に続いて、フィドルを更新しました。現在、最初のオーバーレイはまだ中空のシェルですが、後続のオーバーレイはそうではありません。は?

4

1 に答える 1

2

オーバーレイオブジェクトでstructure_idを設定しておらず、オーバーレイオブジェクトでbelongsTo関係を設定していないためだと思います。フィドル 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"}
];
于 2012-09-05T12:51:18.860 に答える