2017-12-05 4 views
0

Ich versuche, meine Netzwerkaufrufe zwischen meiner Emmi App und meinem Rails API-Backend effizienter zu gestalten, wenn Objekte eines Ember-Datenobjekts abgerufen werden. Sagen wir, ich habe zwei Modelle:Ember.js - Ändern des Formats einer Netzwerkanforderung, die beim Abrufen der zugehörigen Objekte eines Modells gesendet wird

  • shop - ein shop viele products
  • product hat -

Ich verwende einen RESTAdapter für beide Modelle ein product gehört zu einer shop , so dass, wenn Ich versuche, die Produkte eines Ladens wie folgt zu bekommen:

let shop = this.store.find("shop", 1); 
let products = shop.get("products"); 

Nehmen wir an, ich shop mit einem hasMany Beziehung zu den ersten 500 product s in meiner Datenbank. Die Netzwerkanforderungen werden wie folgt aussehen (nehmen alle URL-Pfade gültig sind und führen zu gültigen Controller und Aktionen):

localhost:3000/api/v1/shops/1 
localhost:3000/api/v1/products/1 
localhost:3000/api/v1/products/2 
localhost:3000/api/v1/products/3 
localhost:3000/api/v1/products/4 
localhost:3000/api/v1/products/5 
... 

Mein products api Endpunkt kann in einem filter Parameter nehmen in einen ApplicationRecord.where Aufruf zu füttern. Also, was ich wirklich gerne tun würde, ist in der Lage, das Ergebnis der shop.get("products") Anruf so zu ändern, dass es einen einzigen Anruf an meine products Endpoint mit einem Filter-Parameter und erhält alle verwandten Produkte in loser Schüttung statt 500 einzelnen Anrufe an die api-Endpunkt

Gibt es ein etabliertes Muster, dies zu tun?

+0

könnte dies helfen: https://discuss.emberjs.com/ t/Koaleszenz-find-Anfragen/7076 – Jeff

+0

so basicly in Ihrem Adapter fügen Sie diese Zeile: 'coalesceFindRequests: true,' – Jeff

Antwort

1

Ja, es ist ein Muster/ein Parameter dafür.
Es coalesceFindRequests genannt und würde in der Anwendung Adapter eingestellt werden:

// app/adapters/application.js 

export default DS.RESTAdapter.extend({ 
    coalesceFindRequests: true, 
    // more params to be set here 
}); 

Links zum Thema:
The Adapter Docs
an emberjs docs-entry
a forum entry

+0

Thank you so much! Ich hatte das Gefühl, dass es mit einem benutzerdefinierten Adapter zu tun hatte, aber ich hatte erwartet, einige Funktionen außer Kraft setzen zu müssen. Freut mich zu sehen, es ist ein einfacher One-Liner. – Argus9

Verwandte Themen