2016-06-22 2 views
1

これまでに学んだことから、私はシリアライザで次のことを解決するために何かをしなければならないことを知っていますが、少し失われました...Ember:emberモデルに不一致のapiオブジェクト(asp.net web api)

My api、PortfolioSummaryDtoという名前のオブジェクトを返します。Emberモデルの名前は「portfoliolistitem」です。

これは私のペイロード内(理にかなって)次のエラー 発生しました「portfolio_summary_dtos」を与えるが、何のモデルは(解決モデル名がdealview1する@シリアライザを使用してモデル名「ポートフォリオ - 概要 - DTO」見つかりませんでした。-rest :.modelNameFromPayloadKey( "portfolio_summary_dtos"))

今後、返されるオブジェクトとその名前(およびプロパティ名)がEmberモデルとは全く異なるAPIコールを呼びたいと思います。

誰かがモデルのモデルにapiオブジェクトをマップする方法を読んでくれますか?

答えて

0

ember.jsの一般的な考え方は設定上の慣例なので、ペイロードの基礎となるJSONプロパティにアクセスするにはember.jsモデルの属性と名前に特定の名前を付けなければなりません。

PortfolioSummaryDto - >ポートフォリオ概要-DTO

あなたは、この動作をカスタマイズしたい場合は、あなたがこの規則をオーバーライドしています。

シリアル化プロセスをオーバーライドするには、独自のember.jsシリアライザを実装する必要があります。あなたは、あなたがモデル名については、以下の操作を行うことができ、すべてのember.jsモデルの個々のシリアライザを実装したくないと仮定しましょう:

あなたはapp/application/model-mapping.jsにこのような設定ファイルを作成します。

export default { 
    'PortfolioSummaryDto': 'portfoliolistitem', 
    /* add more here */ 
} 

このファイルは、モデルファイルからember.jsモデルファイルへのマッピングを表します。次に、この方法でアプリケーションシリアライザを作成またはカスタマイズします。

import DS from 'ember-data'; 
import mappingTable from './model-mapping'; 

export default DS.RESTSerializer.extend({ 
    modelNameFromPayloadKey(payloadKey) { 
    return mappingTable[payloadKey] || payloadKey; 
    } 
}); 
+0

これは完璧な感謝の意を表します。マッピングのプロパティについてはどうでしょうか(私は "automapper"があまりにも多くの.net/mvcから来ていると思います) – Nico

+0

[こちら](http://emberjs.com/api/data/classes/DS.RESTSerializer.html#参照) method_normalize)、サーバーから取得したJSONレスポンスを正規化(変更)する方法については、 – Timm