2017-05-08 2 views
1

J'essaie d'obtenir des objets de marques de mon API REST avec braise; mais ma réponse de l'API ne correspond pas aux données attendues. par exemple:Définir le noeud racine json personnalisé sur le sérialiseur de braises

Mon modèle:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    isActive: DS.attr('boolean') 
}); 

Mon URL API: http://localhost:3000/api/brands sa réponse avec:

{"success":true, 
    "data":[ 
     {"id":1,"name":"Mine","isActive":true,"createdAt":"2017-04-23T20:36:49.000Z","updatedAt":"2017-04-23T20:44:32.000Z"}, 
     {"id":2,"name":"forever","isActive":true,"createdAt":"2017-04-23T20:41:14.000Z","updatedAt":"2017-04-23T20:43:57.000Z"} 
    ] 
} 

mais, Ember attend un peu comme ceci:

"brands": [{ 

    "id": 1, 
    "name": "foo", 
    "isActive": "foo" 

}] 

J'essaye de changer le noeud de json de racine dans le sérialiseur appelé marque. mais je ne peux pas le faire fonctionner. :(

ici mon sérialiseur/brand.js

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend({ 

}); 

et mes adaptateurs/application.js

import DS from 'ember-data'; 
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin'; 
import config from '../config/environment'; 


export default DS.RESTAdapter.extend(DataAdapterMixin, { 
    host: `${config.host}`, 
    namespace: `${config.namespace}`, 
    authorizer: 'authorizer:custom' 
}); 

sur la console du navigateur ce message apparaît:

WARNING: Encountered "success" in payload, but no model was found for model name "success" (resolved model name using [email protected]:brand:.modelNameFromPayloadKey("success")) 
WARNING: Encountered "data" in payload, but no model was found for model name "datum" (resolved model name using [email protected]:brand:.modelNameFromPayloadKey("data")) 

Comment Je dis à braise où les données correctes sont? .Certains d'aide est appréciée

Désolé, mon anglais ne va pas bien.

Répondre

1

Comme vous l'avez déjà fait, vous pouvez remplacer le RESTSerializer pour chaque modèle.

Ce que vous voulez réaliser est la normalisation des réponses. Vous pouvez normaliser votre réponse en remplaçant normalizeResponse dans votre sérialiseur (see the docs):

import Ember from 'ember'; 
import DS from 'ember-data'; 

const { 
    RESTSerializer 
} = DS; 

const { 
    get 
} = Ember; 

export default RESTSerializer.extend({ 
    normalizeResponse(store, primaryModelClass, payload, id, requestType) { 
    // Only do normalization for reading: 
    if(requestType !== 'createRecord' && requestType !== 'updateRecord' && requestType !== 'deleteRecord') { 
     // Do your normalization here. For example (not tested): 
     payload = { 
     brands: get(payload, 'data') 
     }; 
    } 

    return this._super(store, primaryModelClass, payload, id, requestType); 
    } 
}); 

Au lieu de passer outre normalizeResponse, vous pouvez aussi remplacer le other normalization methods.

+0

merci @Timm. ça marche :) –