2016-08-20 4 views
0

Ember v2.7.0アプリでは、JSONペイロードを返さないバックエンドエンドポイントを使用する必要があります。しかし、それはRESTエンドポイントのように動作するので、DS.RESTAdapterを使用してデータをフェッチし、ペイロードをDS.Serializer経由で変換すると考えました。JSONペイロードのないEmber-data RESTAdapter

この小さなEmber-twiddleを作成しました。非JSONペイロードでデータをフェッチしようとしています。そしてそれは失敗する。私が知る限り、DS.RESTAdapterコードで失敗し、ペイロードからJSONを抽出しようとしています。私のシリアライザはデータを処理する機会がありません。

これは、私がシリアライザがペイロードをマッチすることに責任がある層だと思ったので、これはちょっと奇妙に思えます。

  1. non-JSONエンドポイントのクエリにDS.RESTAdapterを使用することはできますか?
  2. そうでない場合、非JSONエンドポイントでREST風の動作を実行する最も簡単な方法は何ですか?
+1

エンドポイントが返すデータはどのような形式ですか? – xcskier56

+0

@ xcskier56本当に素敵な構文解析はありません:https://gist.github.com/MichalBryxi/76131c6985637e2b140a4e52dae40aef –

答えて

2

あなたがここで行う必要があるのは、DS.RESTRAdapterから派生し、ajaxOptions-methodをオーバーライドする独自のアダプタを作成することです。そこではdataTypetextに変更することができます。私は、それが他のことをあまりしないので、あなたの正確な目的のためにこれを独自の方法に分けたと想像します。

Emberガイドには、Emberのリポジトリの元のコードに基づいて、このようなものになるはずです。customizing adaptersというページがあります。

import DS from 'ember-data'; 
import Ember from 'ember'; 

const { 
    get 
} = Ember; 

export default DS.RESTAdapter.extend({ 
    ajaxOptions(url, type, options) { 
    var hash = options || {}; 
    hash.url = url; 
    hash.type = type; 
    hash.dataType = 'text'; 
    hash.context = this; 

    if (hash.data && type !== 'GET') { 
     hash.contentType = 'text/plain; charset=utf-8'; 
    } 

    var headers = get(this, 'headers'); 
    if (headers !== undefined) { 
     hash.beforeSend = function (xhr) { 
     Object.keys(headers).forEach((key) => xhr.setRequestHeader(key, headers[key])); 
     }; 
    } 

    return hash; 
    } 
}); 
関連する問題