最近,我开始学习Ember数据,我正在使用非常自定义的API编写应用程序。 来自后端的响应格式不正确,因此我通过方法'normalizeResponse'将其规范化为JsonApi,一切正常。
当我想看到来自回复的内容时,问题出现了。当我读到Ember数据时,我了解到如果得到数据(InnerObjects),我将能够通过它获取属性。 InnerObject.get('some_property'),但它对我不起作用。 如果我想要'some_property',我必须编写InnerObject.data.someproperty,它在较长的路径中看起来很糟糕。我使用Ember.debug()来查看此路径,我的浏览器向我显示属性'_data'是EmptyObject,这是不正确的。当我点击它时,它会显示正确内容列表(外观附件)。 难道我做错了什么 ?我忘记了某些事情或误解了Ember-Data? 我将不胜感激任何帮助。
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', []);
},
答案 0 :(得分:0)
InnerObject.data.someproperty
=>这是错误的。
InnerObject.get('some_property')
=>这是正确的。
使用无效代码更新您的问题。这样我们就可以确定问题了。
1.query方法返回Promise,这将解析为扩展Ember.ArrayProxy的DS.RecordArray,以便您可以使用所有可用的方法。
2. results.get('content')
- 不要访问content
属性,
3.您可以通过results.toArray()
4.您甚至可以使用each
帮助程序来迭代它,就像这个this.get('search').getShopsAndServices(pattern)
返回的普通数组模板一样。