Récemment, j'ai commencé à apprendre des données Ember et j'écris une application avec une API très personnalisée. La réponse de Back-end est en mauvais format, donc je la normalise à JsonApi via la méthode 'normalizeResponse' et tout fonctionne bien.Ember-Data: InnerObject a EmptyObjects - ce qui n'est pas vrai
Le problème apparaît au moment où je veux voir le contenu de la réponse. Quand je lisais sur Ember-data, j'ai appris que si je recevais des données (InnerObjects), je serais capable d'en prendre des propriétés via. InnerObject.get ('some_property'), mais ça ne marche pas pour moi. Si je veux 'some_property', je dois écrire InnerObject.data.someproperty ce qui semble mauvais dans un chemin plus long. J'ai utilisé Ember.debug() pour voir ce chemin et mon navigateur me montre que la propriété '_data' est EmptyObject ce qui n'est pas vrai. Quand je clique dessus, il affiche une liste de contenu correct (voir pièce jointe). Est-ce que je fais quelque chose de mal? Suis-je en train d'oublier quelque chose ou d'avoir mal compris Ember-Data? Je serai reconnaissant pour toute aide.
IMAGES:
export default DS.Model.extend({
facebook: DS.attr(),
www: DS.attr(),
name: DS.attr(),
street: DS.attr(),
house_number: DS.attr(),
postal_code: DS.attr(),
city: DS.attr(),
province: DS.attr(),
picture: DS.attr(),
x: DS.attr(),
y: DS.attr()
});
//json api serializer
export default ApplicationSerializer.extend({
normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {
return this._super(store, primaryModelClass, this._normalizeSearch(payload), id, requestType);
},
_normalizeSearch(shops) {
let data = shops.map((obj) => {
return {
type: "search",
id: obj.id_sklep,
attributes: {
facebook: obj.facebook,
www: obj.www,
name: obj.nazwa_sklep,
street: obj.adres_ulica,
house_number: obj.adres_nr_domu,
postal_code: obj.adres_kod,
city: obj.adres_miasto,
province: obj.adres_woj,
picture: obj.zdjecie_sklep,
x: obj.lat,
y: obj.lng
}
};
});
return { data: data } ;
}
});
export default Ember.Service.extend({
getShopsAndServices(pattern) {
return this.get('store').query('search', {
fraza: pattern,
cena_min: 0,
cena_max: 100,
id_kat: 1,
lat: 53,
lng: 18
});
}
}
//Controller action:
searchRequest(pattern) {
return pattern.length > this.MIN_CHARS_FOR_SEARCH ? this.get('search').getShopsAndServices(pattern).then((results) => {
let content = results.get('content').length ? results.get('content') : [];
if (content) {
let foo = content[0];
Ember.Logger.debug(foo)
Ember.Logger.debug(foo._data.name)
Ember.Logger.debug(foo.get('name'))
}
return this.set('content', results.get('content').length ? results.get('content') : []);
}) : this.set('content', []);
},