Cartographie des données du sérialisateur de données de braille

J'utilise Ember & Ember-Data pour essayer de consommer un flux json depuis le serveur. Voici mon code:

App = Ember.Application.create(); DS.RESTAdapter.configure( "plurals", { category: 'categories' } ); App.Store = DS.Store.extend({ revision: 12, adapter: DS.RESTAdapter.create({ url: 'app' }) }); App.Router.map(function(){ this.resource('categories'); }); App.CategoriesRoute = Ember.Route.extend({ model: function() { return App.Category.find(); } }); var attr = DS.attr; App.Category = DS.Model.extend({ name: attr('string') }); 

Maintenant, cela fonctionne bien avec un serveur de test. À l'aide de la JSON suivante

 { "categories":[ { "name":"Beef", "id":1 }, { "name":"Pork", "id":2 } ] } 

Cependant, en production, le serveur fournit le json suivant:

 { "success":true, "message":"Request successful", "total":2, "data":[ { "name":"Beef", "id":1 }, { "name":"Pork", "id":2 } ] } 

Je ne peux pas pour la vie de moi savoir comment utiliser le sérialiseur pour consommer le live json. Toute aide serait appréciée. Merci d'avance.

METTRE À JOUR:

Depuis, j'ai essayé d'écrire le sérialiseur, mais ça ne semble pas fonctionner …

voir ci-dessous

 App.Store = DS.Store.extend({ revision: 12, adapter: DS.RESTAdapter.create({ url: 'app', serializer: DS.RESTSerializer.extend({ extract: function(loader, json, type, record) { var root = 'data'; this.sideload(loader, type, json, root); this.extractMeta(loader, type, json); if (json[root]) { if (record) { loader.updateId(record, json[root]); } this.extractRecordRepresentation(loader, type, json[root]); } } }) }) }); 

Ce qui génère maintenant cette erreur Uncaught Error: assertion failed: Your server returned a hash with the key data but you have no mapping for it

Vous avez 2 options

  • Rend votre serveur compatible et laissez-le retourner le json car les données de la braise l'attendent,
  • Écrivez votre propre adaptateur / sérialiseur pour prendre en charge ce format.

MISE À JOUR: écrivez votre propre sérialisateur MISE À JOUR 2: débarrassez-vous des fonctions inutilisées

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/serializers/json_serializer.js#L196

Vous pouvez hériter du DS.RESTSerializer et changer l' extract avec ce code

  extract: function(loader, json, type, record) { var root = 'data'; if (json[root]) { if (record) { loader.updateId(record, json[root]); } this.extractRecordRepresentation(loader, type, json[root]); } } 

Cela suppose que le contenu de la demande sera toujours sous la clé de data de votre json.