4

私のAPIの一部は次のように設定されています:

/v1/place/:place_uuid- 場所を取得する

/v1/place/:place_uuid/cart- その場所に関連付けられたショッピング カート オブジェクトを取得する

ルートは正しく設定されていますが (以下を参照)、Ember によって行われた API リクエストが自分のものと一致しません。

App.Router.map(function() {
    this.resource('place', { path: '/:place_uuid' }, function() {
        this.resource('category', { path: '/:category_uuid' }, function() {
            this.resource('product', { path: '/:product_uuid' });
        });
        this.resource('cart', { path: '/cart' });
    });
});

ブラウザーに読み込むと、正しい/:place_uuidAPI 要求が表示されます。/v1/place/:place_uuid返されたオブジェクトでルートがレンダリングされます。

ブラウザに読み込む/:place_uuid/cartと、上記と同じだけでなく、 への 2 番目の API リクエストも表示され/v1/cartsます。/v1/cartsこれは、 URLを除いてすべて問題ありません。私はそれが必要です/v1/place/:place_uuid/cart

Cart モデル用のカスタム アダプターで buildURL を使用しようとしましたが、うまくいきませんでした。以下の place_uuid にアクセスできないため、挿入できません。

cartAdapter = App.Adapter.extend({
  buildURL: function(record, suffix) {
    console.log(record); // just a string. 
    var url = [this.url];
    url.push('places');
    url.push(place_uuid); // if only I had access to place_uuid I could inject it here
    url.push('cart');
    return url.join("/");
  }
});
App.Store.registerAdapter('App.Cart', cartAdapter);

元の API エンドポイントを使用できれば素晴らしいと思います。エンドポイントを変更する別のオプションがあると思います/v1/carts?place_uuid=:place_uuid(Ember はこれを好むようですが、バックエンドで作業していないので少し注意が必要です)。

アドバイスをいただければ幸いです。

4

3 に答える 3

4

Ember はネストされた REST URL/リソースをまだサポートしていません。この機能には、監視できる未解決の問題があります。

于 2013-05-06T18:31:23.433 に答える
1

恥知らずなプラグ:)

この種の状況に役立つように、https://github.com/amiel/ember-data-url-templatesを書きました。新しいバージョンの ember-data で動作します。それを使用すると、次のようなことができます。

App.CartAdapter = App.ApplicationAdapter.extend({
  queryUrlTemplate: "/v1/place/{placeId}/cart",

  urlSegments: {
    placeId(type, id, snapshot, query) {
      return query.placeId;
    }
  }
});


// in the route
this.store.query('cart', { placeId: placeId });

それが役立つことを願っています:)

于 2016-01-08T00:04:42.237 に答える