2017-01-27 8 views
0

私は作成したAPIを呼び出しています。レスポンスは大きなJSONを返します。その中にはすべてのデータがネストされています。 例:EmberストアがネストされていないhasMany関係データ

"feed" : { 
    "id": 12345, 
    "name": "trogdor", 
    "items": [ 
    { 
     "id":6789, 
     "content": I am an items content 
    }, 
    { 
     "id":6789, 
     "content": I am an items content 
    }, 
    { 
     "id":6789, 
     "content": I am an items content 
    }, 
    { 
     "id":6789, 
     "content": I am an items content 
    } 
    ] 
} 

あなたが見ることができるように、hasManyアイテムを返すあるフィードモデル。

だから私のモデルは、このような次のように定義される。

フィードモデル:

export default DS.Model.extend({ 
    name: attr('string'), 
    items: hasMany('item') 
}); 

項目モデル:

export default DS.Model.extend({ 
    content: attr('string'), 
    items: belongsTo('feed') 
}); 

しかし、約束は、私のモデルの呼び出しからの戻りのとき、データがありませんモデルの「アイテム」を呼び出すときに設定されます。代わりに、属性やデータのないストアクラスを取得するだけです。

モデルをログに記録して、dataハッシュを開こうとすると、データが含まれていない灰色のEmptyObjectが表示されます。エンバーCLIを使用した

+1

シリアライザでEmbeddedRecordsMixinを使用する必要があると思われます。http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html – dwenzel

+0

使用する場合は、サンプルがRESTまたはJsonApiと一致しませんRESTチェックhttp://emberjs.com/api/data/classes/DS.RESTAdapter.html現在のデフォルトのJsonApiを使用するための関係の下でhttp://jsonapi.org/ –

+0

待ちますので、私のような関係を入れ子にすることはできませんか?私のサーバがそのようなものを全て引き出すのは、レールがネストされたjson応答を返すのを容易にするので、実際には効率が悪いようです – gattra

答えて

0

、フィードのモデルのための新しいシリアライザを生成します。 ember g serializer feed

すると、次のようにシリアライザを定義します。

import DS from 'ember-data'; 
import ApplicationSerializer from './application'; 

export default ApplicationSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    items: { embedded: 'always'}, 
    } 
}); 

あなたがメインのapplication.jsアダプタでDS.RESTadapterを拡張していることを確認しますEmberが埋め込まれたネストされたJSONデータを適切にシリアル化するようにする必要があります。そうしないと、EmberはサーバーからのペイロードがJSON API形式であると予測します。

関連する問題