2016-06-24 4 views
1

私はemberプロジェクトでrestサービスを統合するためにRESTAdapterとRESTSerializerを使用しています。既定のApplicationAdapter(Extend RESTAdapter)を使用して、残りのサービス操作を実行することができ、特定のモデルのカスタムアダプターを作成することができます。Ember - 複数のモデルのカスタムアダプタとシリアライザ

私はいくつかの特定のモデルのセットに使用できるカスタムアダプタを作成したいと思います。

たとえば、

//Application adapter extends RESTAdapter 

var LookupAdapter = ApplicationAdapter.extend({ 
    host: Properties.LookupServiceHost, 
    namespace : Properties.LookupServiceNamespace, 
}); 

export default LookupAdapter; 

私はのために(要求、応答を処理するため)国、言語などフェッチとデータストア内のデータを取り込むために、今私は、別のアダプタを使用しています、シリアライザのようないくつかのモデルを持っています各モデル。私はこれらの特定のモデルをLookupAdapterと一緒に扱いたいと思っています。これらのモデルがLookupAdapter/LookupSerializerを使用するように、このアダプタをモデルに割り当てることはできますか?

あなたのアダプタがLookupAdapterであることをモデルに伝える方法はありますか?

答えて

1

すべてのモデルに対してアダプタとシリアライザを作成し、LookupAdapter/-Serializerをインポートしてそれから拡張することができます。テストされていないコードの先読み:

// In file ../adapters/country.js 
import LookupAdapter from '../adapters/lookup'; 
export default LookupAdapter.extend({}); 

.extend({})を省略することもできます。

EDIT:

あなたは各モデル用のアダプタとシリアライザを作成したくない場合は、あなた自身のDS.Storeを実装することができます。 DS.Storeは、これらのメソッドを提供します。

  • adapterFor
  • serializerFor

あなたが指定したアダプタにmodelNameをマッピングするマッピングテーブルを、書くことができます。

さらに、ember.jsのソースコードには、アダプタが見つからない場合にはApplicationAdapterが代わりに使用されていると記載されています。

EDIT 2:

アプリ/マッピング/ adapters.js:

export default { 
    'country': 'lookup', 
    'city': 'lookup' 
} 

アプリ/店舗/ application.js:

import adaptersMapping from '../mappings/adapters'; 

export default DS.Store.extend({ 
    adapterFor(modelName) { 
    if(adaptersMapping[modelName]) { 
     return this._super(adaptersMapping[modelName]); 
    } 
    return this._super(modelName); 
    } 
}); 

あなたはこのような何かを行うことができます

+0

今は、LookupAdapterを拡張することによって、モデルごとに別々のアダプタ/シリアライザを作成しています。別のアダプタ/シリアライザを作成する代わりに、各モデルにLookupAdapterを使用できますか?あなたのアダプタがLookupAdapterであることをモデルに伝える方法はありますか? –

+0

私の編集はあなたの問題に対処していますか? – Timm

+0

返信のためにTimmさんに感謝します。adapterFor(model)はそのモデルのアダプタのインスタンスを返します(現在はApplicationAdapterを返します)。 cutomアダプターのインスタンスを返すために、モデルをアダプターに割り当てる必要があります。私はそれをどのように達成できるのか尋ねています。私はマッピングテーブルについてはっきりしていませんが、どうすればそれを作成できますか? –

関連する問題