2016-05-26 19 views
0

Ich bin ein bisschen verwirrt und brauche nur etwas Klarheit: Sollte ich einen benutzerdefinierten Adapter oder einen benutzerdefinierten Serializer implementieren?Ember-Daten mit Anpassung für die Verwendung mit Nicht-JSONAPI-Service

Ich brauche meine Ember App, um mit einem REST/Json Backend zu sprechen.

Ich möchte meine glut App, die Ressource freizulegen, wie:

GET/locations /: id

Aber der Host verbindet es die Ressource befindet sich auf bis hat:

GET http://server/api/location/:id

Payload vom Server:

{ 
    "id": "7ff3269e-d16c-4cc4-954d-aef8e662e0f6", 
    "geo": { 
    "latitude": 0, 
    "longitude": 0 
    }, 
    "typedAddress": { 
    "addressType": "US", 
    "countryCode": "US", 
    "name": "string", 
    "address1": "string", 
    "address2": "string", 
    "address3": "string", 
    "postalCode": "string" 
    }, 
    "customDescription": "string", 
    "timezone": "string" 
} 

Mein Modell in ember hierfür:

export default Model.extend({ 
    latitude: attr('number'), 
    longitude: attr('number'), 
    addressType: attr('string'), 
    countryCode: attr('string'), 
    address1: attr('string'), 
    address2: attr('string'), 
    address2: attr('string'), 
    city: attr('string'), 
    state: attr('string'), 
    briefPostalCode: attr('string'), 
    postalCode: attr('string'), 
    timezone: attr('string') 
}); 

Antwort

4

Sie müssen nur die RESTAdapter verwenden und deine eigenen Serializer zu schreiben.

Angenommen, Ihr Modelltyp ist "Standort". Sie hätten eine app/serializers/location.js wie folgt:

export default DS.RESTSerializer.extend({ 
    normalizeResponse(store, primaryModelClass, payload, id, requestType) { 
     let data= { 
      locations: [{ 
       id: payload.id, 
       latitude: payload.geo.latitude, 
       // etc. for all your properties 
      }] 
     }; 
     return this._super(store, primaryModelClass, data, id, requestType); 
    } 
}); 
+0

Ich habe diesen Ratschlag von einem Freund auch nur vor ein paar Minuten. Ich werde damit gehen. Danke –

+0

Follow-up-Kommentar: Ich bemerkte, dass Sie Standorte als [] haben, obwohl es nur einen gibt. Ist die Annahme, dass es ein Array sein könnte? –

+0

Ja, es funktioniert mit Singular oder Plural für den Modellnamen. Ich finde es am einfachsten, immer Array anzunehmen. –