2016-06-22 8 views
1

を含める:エンバーJS:カスタマイズアダプター私は現在、2つのオブジェクトを使用してデータベースを持っている複数のパラメータ

  1. 役割
  2. 許可

ONE役割は、多くの権限を持つことができます。許可が役割に追加されたとき、それはこの要求を生成し、デフォルトでは

export default DS.RESTAdapter.extend(DataAdapterMixin, { 
    namespace: 'v1', 
    host: ENV.APP.API_HOST, 
    authorizer: 'authorizer:application', 
    pathForType: function(type) { 
    return 'staff/roles'; 
    } 
}); 

:私は現在としての私の役割アダプタを設定している

要求:

PUT /v1/staff/roles/1 

ボディ:

{ 
    "name": "name_of_role" 
    "permissions": [ 
    { 
     "id": "3", 
     "name": "name_of_permission" 
    }, 
    ... 
    ] 
} 

アダプタをカスタマイズして、次のようなリクエストを生成したいと考えています。

要求:

PUT /v1/staff/roles/1/permissions/3 

ボディ:

<None> 

誰かが、私はこれをやって行くことができる方法を教えていただけますか? Ember JSに対応するためにサーバーAPIを更新することは、残念なことにオプションではありません。

UPDATE:ライアンの応答に基づいて

、ここに私のためのトリックをした(私はそれを呼び出すよ乱雑)の回避策です。

これは、よりエレガント作るための提案を開い:

export default DS.RESTAdapter.extend(DataAdapterMixin, { 
    namespace: 'v1', 
    host: ENV.APP.API_HOST, 
    authorizer: 'authorizer:application', 
    pathForType: function(type) { 
    return 'staff/roles'; 
    }, 

    updateRecord: function(embestore, type, snapshot) { 
    var roleID = snapshot.id; 
    var permissionID = snapshot.adapterOptions.permissionID; 
    var url = ENV.APP.API_HOST + "/v1/staff/roles/" + roleID + "/permissions/" + permissionID; 

    return new Ember.RSVP.Promise(function(resolve, reject){ 
     Ember.$.ajax({ 
     type: 'PUT', 
     url: url, 
     headers: {'Authorization': 'OAUTH_TOKEN'}, 
     dataType: 'json', 
     }).then(function(data) { 
     Ember.run(null, resolve, data); 
     }, function(jqXHR) { 
     jqXHR.then = null; // tame jQuery's ill mannered promises 
     Ember.run(null, reject, jqXHR); 
     }); 
    }); 
    }, 
}); 

答えて

1

私はエンバーのドキュメントでそれを見つけることはできませんが、あなたがオーバーライドできるアダプタに接続universal ajax methodがあります。

だから私たちの認証スキームに合わせて私のアダプタで、私はこれをやった:

export default DS.RESTAdapter.extend({ 
    host: ENV.host, 
    ajax: function(url, method, hash){ 
     if(hash){ 
      if(hash.data !== undefined && hash.data !== null){ 
       hash.data.sessionId = this.getSessionId(); 
      } 
     }else { 
      hash = { 
       data: {} 
      }; 
      hash.data.sessionId = this.getSessionId(); 
     } 
     return this._super(url, method, hash); 
    }, 
    getSessionId: function(){ 
     return window.sessionStorage.getItem('sessionId') || {}; 
    } 
} 

これは、アプリケーション全体アウトかかわらず作られたサーバーへのすべてのAJAX呼び出しにセッションIDを付与します。

urlに変更されたhash引数に基づいて変更すると問題になりません。

私のバージョンのemberは2.3.2ですが、私は最新の安定版(2.5.2)のember-dataを使用していますが、これは私が見つけたそのブログ投稿の年齢を心配している場合。

+0

大変お手数ですが@ryan。使用されたソリューションで私の答えにアップデートを追加します。あなたの方向にかなり近づいた。 – unicornherder

関連する問題