2016-12-13 6 views
1

EmberJSで作業を始めました。私は絶対にそれを愛しています。それは学習曲線を持っていますが、私はそれが根本的に非常に意味のある原則を持っていると信じています。EmberJSでAJAX GETとPOSTを行う正しい方法

私の質問は、Ember JSでGETとPOSTの呼び出しを行う方法です。私はモデル/ストアがあることを理解していますが、モデルは(私の意見では)特定のエンティティの属性にしかなりません。

次の質問に対する考えはすばらしいでしょう。

1. USER A send friend request to USER B. Should there be a "Request" 
    model? And do I just make a POST request? 

2. Some arbitrary data needs to be returned for the page. Not 
    particularly of a model. Should I still make a model for that? 
    For use a simple GET request? 

3. User needs to update this profile photo. How can the file 
    to be uploaded, be set as a model attribute? 

通常のGETコールとPOSTコール(私はそれらをまったくやりたい場合)をどうやって行うべきですか?ちょうどjQueryの$ .ajax()を使うか、別の方法があります。私はまた、$ .ajaxを約束のスタイルに拡張したサービスember-ajaxを見つけました。

ご意見をいただければ幸いです。

ロングライブEmberJS :)

答えて

4

最初のオプション:あなたはember-dataを使用することができます。それはserializersまたはadaptersのようなカスタマイズを持っています。

2番目のオプション:ember-ajaxのようなアドオンを使用できます。

jQueryのajax()を使用しています。 jquery.ajax()をラップし、コード内のどこにでも使用するサービスを作成しました。我々は、それが私たちに異なる種類のクエリを書く柔軟性を与えると信じています。 modelember-dataではありません。

サンプル - 擬似 - コード:

export default Ember.Service.extend({ 
    doPostCall(target, data, options=null){ 
     //consider cloning options with Ember.$.extend 
     var requestOptions= options || {}; 
     requestOptions.url=target; 
     requestOptions.type='POST'; 
     requestOptions.data=JSON.stringify(data); 
     doRemoteCall(requestOptions); 
    }, 

    doGetCall(target, data=null, options=null){ 
     //consider cloning options with Ember.$.extend 
     var requestOptions=options || {}; 
     requestOptions.url=target; 
     requestOptions.type='GET'; 
     requestOptions.data=data; 
     doRemoteCall(requestOptions); 
    }, 

    doRemoteCall(requestOptions){ 
     //assign default values in here: 
     // such as contentType, dataType, withCredentials... 

     Ember.$.ajax(requestOptions) 
     .then(function(data) { 
      Ember.run(null, resolve, data); 
     }, function(jqXHR , textStatus, errorThrown) { 
      jqXHR.then = null; 
      Ember.run(null, reject, jqXHR, textStatus, errorThrown); 
     }); 
    } 
    }); 

PS:あなたは(のfastboot付き)サーバ側でアプリケーションを実行する必要がある場合はところで、あなたはjQueryのを使用することはできません。したがって、ember-networkを使用してください。

+1

私はそれが好きです。このアプローチでシリアライザやアダプタが欠けていることはありますか? – IAMZERG

+0

いいえ、決してありません。私にはモデルがないので。非常にまれに、私はモデルが間違っていますが、Ember.Objectがあれば十分です。 – ykaragol

3

モデルに対してCRUD操作を実行している場合は、ember-dataが便利です。ほとんどのアプリでは、CRUD操作が要求の90%を占めています。

アプリがember-dataには適していないリクエストを行う必要がある場合があり、その場合はember-ajaxがゲームに参加します。これにより、jQueryだけでなく、アプリケーション全体で使用されるヘッダなどのカスタマイズを可能にする拡張ポイントを持つサービスを通じてリクエストが行われることもできますちょうど生のjquery。

アプリがfastbootで実行される場合は、ブラウザとノードの両方で動作するため、ember-networkを使用する必要がありますが、jquery/ember-ajaxでは動作しません。

関連する問題