要求

2017-02-20 6 views
0

Iルートのコードを以下た:要求

/ユーザー/ {somethingId}

model(params) { 
    return this.store.findRecord('user', params.id) 
    } 

そして、どのように予想される、それへの要求します

外部APIの私のルートは入れ子になっていて、それは次のようになります:

/partners/{somethingId}/users

このため、私は何かを要求ようにする必要があります。

/パートナー/ {somethingId} /ユーザーまたは/パートナー/ {somethingId} /ユーザー/ {userIdを}

IをEmberの関係を試みたが、それは私を助けなかった。私もこの方法store.adapterForを試してみました

return this.store.findRecord('partner', params.id, {include:'users'}); 
// api/partners/5?include=users 

、それはすぐに各要求の前に私のアダプタの名前空間を変更しました:私はのparamsにURLを得

this.store.adapterFor('application').set('namespace', '/api/partners/' + params.id); 

しかし、この事を行う各要求の前に、すべての時間が汚れだろう私はこのようにしたくありません。

私はajax-emberのようなものを使うことができますが、私はアダプタでDS.storeを使いたいと思います。どんな助けもありがとう。

答えて

1

あなたは残念ながら、燃えさしデータはリソースのためのネストされたURLをサポートしていませんurlForFindRecord

アプリ/アダプタ/ user.jsの

import DS from 'ember-data'; 

export default DS.JSONAPIAdapter.extend({ 
    urlForFindRecord(id, modelName, snapshot) { 
    let baseUrl = this.buildURL(); 
    return `${baseUrl}/partners/${id}/users`; 
    } 
}); 
+0

ありがとうございます。ときには、私はcreateRecordや更新が必要になります。あるいはこれを他のネストされたモデルで使用することさえできます。 –

+0

例えば、更新のために、私は '/ partners/{somethingId}/users/{userId}'のようにリクエストするために2つのidを渡す必要があります。 –

+0

これをfindRecord '{adapterOptions:this.get( 'orderId' )} 'であれば、' urlForFindRecord'で 'snapshot 'にアクセスすることができます。adapterOptions' – kumkanillam

1

userモデル用のアダプタを作成してオーバーライドする必要があり、簡単な解決策はありません。他の回答で示唆したように

  1. 、そのようなリソースごとにアダプタを作成し、buildUrlメソッドをオーバーライド:あなたは3つのオプションがあります。
  2. emberデータをあきらめて、リクエストにはEmber.$.ajaxを使用してください。キャッシュにはEmberデータを使用することもできます(モデルを通常どおりに記述し、DS.Store.pushPayload、DS.Store.hasRecordForId、DS.Store.peekRecord、DS.Store.peekAllなどのメソッドを使用することもできます)。
  3. エバーデータで動作するエンドポイントをサポートするようにバックエンドを変更します。

3がオプションでない場合、私は2を提案します。私の意見では、特にバックエンドを書き換えることができない場合(制御できない場合)のemberデータは実際のプロジェクトにとっては制限があります。