2

残りのデータでは、モデルのコレクションを取得する場合は、これを使用するのが慣例です。

this.store.findAll('order');

またはフィルターを使用すると、次のようになります。

this.store.find('order', {shopId: 63});

モデル名を渡すと、Ember-data が URL を作成します。これは次のようになります (アダプターによって異なります)。

GET /api/orders
GET /api/orders?shopId=63

したがって、これは2つのことを行います

  • API からデータを取得するための URL を作成する
  • 第 1 引数として渡したモデルを使用して、コレクションを JavaScript オブジェクトとしてマップします。

しかし、2 つの URL から注文を取得したい場合はどうすればよいでしょうか。/api/ordersそして/api/new_orders

最初のものは通常どおり動作します:this.store.findAll('order')が、取得元の API パスをオーバーライドする方法はありますか?

多分何かのようなthis.store.find('order', {path: '/new_orders'})

order自分のモデルでモデル化されたが、別のルートからフェッチされたオブジェクトのコレクションで終わることができるように

4

1 に答える 1

0

このストアには REST アダプターが必要で、findAll メソッドをオーバーライドする必要があります。デフォルトの実装はそのままです

findAll: function(store, type, sinceToken) {
    var query, url;

    if (sinceToken) {
      query = { since: sinceToken };
    }

    url = this.buildURL(type.modelName, null, null, 'findAll');

    return this.ajax(url, 'GET', { data: query });
  }

buildUrl最初の URL の適切なエンドポイントを返します。次に、この URL を解析して変更し、同じデータを使用して 2 番目のエンドポイントに対して 2 番目のリクエストを行うことができます。応答をマージするか、個別に使用するよりも。

参考:https ://github.com/emberjs/data/blob/v1.13.5/packages/ember-data/lib/adapters/rest-adapter.js#L398

于 2015-07-16T14:50:07.143 に答える