2016-09-26 7 views
0

私はemberへの初心者です。だからここに私が直面しているものがあります。私はバックエンドのRESTAPIをPython/Djangoで書いています。 /api/works/17/:それはまた、詳細ビュー例:上の/api/works/代替URLのEmberシリアライザのカスタマイズ

[ 
{ 
    "id": 17, 
    "title": "about us", 
    "description": "some project", 
    "owner": "admin" 
}, 
{ 
    "id": 19, 
    "title": "test1 profit project", 
    "description": "dev null", 
    "owner": "test1" 
} 
] 

に次のようなJSONレスポンスを提供し、フロントエンド側の作業タスクに

[ 
{ 
    "id": 2, 
    "title": "secondWorkTask", 
    "description": "task2 description", 
    "due_date": "2016-09-26", 
    "assign": 1, 
    "project": "about us" 
}, 
{ 
    "id": 3, 
    "title": "some task name", 
    "description": "some task description", 
    "due_date": "2016-08-27", 
    "assign": 2, 
    "project": "about us" 
} 
] 

をリストするためにも/api/works/17/tasks/あり

{ 
"id": 17, 
"title": "about us", 
"description": "some project", 
"owner": "admin" 
} 

私はember-cli version2.7.0 + ember-django-adapterを使用しています。私は/ api/workを問題なく入手できます。残り火上

シリアライザは、プロジェクトを取得する:

export default DRFSerializer.extend({ 
    normalizeFindAllResponse(store, primaryModelClass, payload, id, requestType) { 
    payload.data = payload; 
    return this._super(...arguments); 
} 
}); 

燃えさし側の作業の詳細URLは(emberexample-app.com/app/17/)負荷が、それはすべてのタスクを表示しなければならないときに何私が達成したいことは燃えさし側であります。現在、私は上記のシリアライザとこのURL /api/works/17/によって作業の詳細を得ることができます。しかし、どのように私は仕事を得ることができますか?これを解決する方法を見つけるのを手伝ってください。

答えて

1

シリアライザは、データのロードと保存(またはシリアライゼーションとデシリアライゼーション)をカスタマイズするために使用されます。

URLをカスタマイズするには、アダプタを使用する必要があります(たとえば、RESTAdapterが最もよく使用されるアダプタです)。あなたは(urlForCreateRecord)を作成したい場合には動作します

または更新(urlForUpdateRecord)タスクが、あなただけのGET http://endpoint/work/<work_id>/tasksbelongsTo関係以下work.get('tasks')を変換したい場合には、直接、少なくとも私の場合には、動作しない場合がありますそれは "ちょうど"働いていませんでした。

私が見つけた解決策は、プロパティとして取得する異なる子モデルへのリンクを含む親オブジェクトに、プロパティlinksを親オブジェクトとして追加することです。このような

何か:この例では

/* app/adapters/work.js */ 
import DS from 'ember'; 

export default DS.RESTSerializer({ 
    normalize (model, hash, prop) { 
     hash.links = hash.links || {}; 
     hash.links.tasks = this.buildURL(model, hash.id) + '/tasks'; 
     return this._super(model, hash, prop); 
    } 
}); 

、エンバーは作業モデルからタスクのプロパティを取得しようとすると、それはwork.links.tasksが含まれているURLにGETを行います。

+0

リンクを使用していただきありがとうございます。本当の選択です。 – Zorig

+0

'/ api/works/17/tasks /'にタスクを作成することは可能ですか?タスクシリアライザを作成タスクのために更新する必要がありますか両方の関数を編集する必要がありますか?現在のタスクの作成は '/ api/works/17/tasks /'の下でのみ可能ですが、編集/削除の際は '/ api/tasks/2 /'の下にあります – Zorig

+1

DRFAdapterが[DS.RESTAdapter](http:// emberjs .com/api/data/classes/DS.RESTAdapter.html)(そしてそれは(https://github.com/dustinfarris/ember-django-adapter/blob/master/addon/adapters/drf.js# L21))各アクションのURLを個別にカスタマイズすることが可能です。DS.RESTAdapterの 'urlForDeleteRecord'メソッドと' urlForUpdateRecord'メソッドを見てください。 – Terseus

関連する問題