2016-06-24 15 views
1

I RESTAdapter und RESTSerializer verwenden. Ich bin in der Lage, den Rest Service-Betrieb mit dem Standard ApplicationAdapter (RESTAdapter erweitern) und ich kann benutzerdefinierte Adapter für bestimmte Modelle erstellen.Ember - für die Integration von Rest-Service in meinem ember Projekt Individuelle Adapter und Serializer für mehrere Modelle

Ich möchte einen benutzerdefinierten Adapter schaffen, die für eine bestimmte Gruppe von Modellen verwendet werden können.

Beispiel

//Application adapter extends RESTAdapter 

var LookupAdapter = ApplicationAdapter.extend({ 
    host: Properties.LookupServiceHost, 
    namespace : Properties.LookupServiceNamespace, 
}); 

export default LookupAdapter; 

Ich habe einige Modelle wie Land, Sprache etc. Für das Abrufen und Daten im Datenspeicher bevölkert, jetzt habe ich separate Adapter verwenden, Serializer (für den Umgang mit Request, Response) für jedes Modell. Ich möchte diese spezifischen Modelle mit LookupAdapter gearbeitet werden. Können wir diesen Adapter dem Modell trotzdem zuweisen, sodass diese Modelle den LookupAdapter/LookupSerializer verwenden?

Gibt es eine Möglichkeit Modell zu sagen, dass Ihr Adapter LookupAdapter ist?

Antwort

1

Sie könnten erstellen Adapter und Serializer für jedes Modell und importieren Sie Ihre LookupAdapter/-Serializer und von ihm erstrecken. Nicht getestet Code vor:

// In file ../adapters/country.js 
import LookupAdapter from '../adapters/lookup'; 
export default LookupAdapter.extend({}); 

Ich glaube, Sie sogar die .extend({}) weglassen könnte.

EDIT:

Wenn Sie nicht wollen, einen Adapter und Serializer für jedes Modell erstellen Sie Ihre eigenen DS.Store implementieren könnte. DS.Store bietet diese Methoden:

  • adapterFor
  • serializerFor

Sie eine Zuordnungstabelle schreiben könnte, die die modelName an einen Adapter Karten, die Sie angeben.

Darüber hinaus ist die Ember.js Quellcode sagt, dass, wenn kein Adapter gefunden wird ApplicationAdapter wird stattdessen verwendet.

EDIT 2:

Man könnte so etwas tun:

app/Mappings/adapters.js:

export default { 
    'country': 'lookup', 
    'city': 'lookup' 
} 

app/Geschäfte/application.js:

import adaptersMapping from '../mappings/adapters'; 

export default DS.Store.extend({ 
    adapterFor(modelName) { 
    if(adaptersMapping[modelName]) { 
     return this._super(adaptersMapping[modelName]); 
    } 
    return this._super(modelName); 
    } 
}); 
+0

Im Moment erstelle ich einen separaten Adapter/Serializer für jedes Modell, indem ich LookupAdapter erweitere. Ich frage wie, anstatt separaten Adapter/Serialisierer zu erstellen, können wir LookupAdapter für jedes Modell verwenden? Gibt es eine Möglichkeit, dem Modell mitzuteilen, dass es sich bei Ihrem Adapter um LookupAdapter handelt? –

+0

behandelt meine Bearbeitung Ihr Problem? – Timm

+0

Danke Timm für die Antwort, AdapterFor (Modell) gibt die Instanz des Adapters für dieses Modell zurück (zur Zeit gibt es ApplicationAdapter zurück). Um diese Instanz von cutom Adapter zurückzugeben, sollten wir das Modell einem Adpater zuweisen. Ich frage, wie können wir das erreichen? Ich bin mir nicht sicher über Mapping-Tabelle, wie können wir das schaffen? –