カスタム サーバー PHP API に沿って Ember RC6 と Ember-Data v0.13-54 を使用してアプリを操作すると、モデルの関係 (主に多対多) とサイド ローディングでいくつかの問題が発生します。
問題のモデルは次のとおりです。
App.Member = DS.Model.extend({
apiToken: DS.attr('string'),
apiTokenExpire: DS.attr('string'),
favourites: DS.hasMany('App.Presentation')
});
App.Presentation = DS.Model.extend(
{
title: DS.attr('string'),
description: DS.attr('string'),
date: DS.attr('date'),
category: DS.belongsTo('App.Category'),
tags: DS.hasMany('App.Tag'),
employees: DS.hasMany('App.Member'),
presentation: DS.belongsTo('App.File'),
presenterNotes: DS.belongsTo('App.File'),
cover: DS.belongsTo('App.Image')
});
私が持っているモデルとの関係を送信するために RESTAdapater を取得するMember
には:
App.APIRESTAdapter.map('App.Member', {
favourites: {embedded: 'always'}
});
サーバーをロード/members/1
すると、次のように返されます。
{
"member": {
"api_token": "9fa236ad58726584d7b61bcf94b4dda37cbd3a24",
"api_token_expire": "1383832335",
"id": 1,
"favourite_ids": [ 3 ],
"group_ids": [ 2 ]
},
"presentations": [
{
"title": "That's a new one!",
"category_id": 2,
"id": 3,
"tag_ids": [ 1 ],
"employee_ids": [ 1 ]
}
]
}
しかし、ログget('member.favourites').mapProperty('id')
に記録すると、空の配列が取得され、実際にはモデルfavourites
に追加されません。Member
favourites
RESTAdapterへの埋め込みを無効にすると、すべて正常に動作します。何か足りないものがあるのでしょうか、それとも JSON 応答のフォーマットに問題があるのでしょうか?
編集:
掘り下げてみると、データをサイドロードするときに使用されるリレーション名 ( favorites、employees ) がモデル名 ( Member、Presentation ) とは異なるという事実に問題があるようです。奇妙なことに、rev。12 https://github.com/emberjs/data/blob/master/BREAKING_CHANGES.mdモデルはタイプごとにサイドロードする必要があります。
いくつかのテストを行って、これら 2 つのモデルに新しい多対多の関係を追加しました。
App.Member
取得presentations: DS.hasMany('App.Presentation')
App.Presentation
得るmembers: DS.hasMany('App.Member')
サーバーから返される JSON はまったく同じであり、ログget('member.presentations')
を記録すると、必要に応じてプレゼンテーションのリストを取得できるようになりました。
この時点で、これはバグのように見えますが、何か足りないのでしょうか? お気に入りと従業員のマッピングを試みましたRESTAdapater
が、それは役に立ちませんでした... 役立つアダプタ構成が他にもあるのではないでしょうか?