随着我对Ember.js应用程序构建过程的深入和深入,我撞上了另一面墙。Ember.js在海市蜃楼成功后将应用程序连接到真正的api
在我使用mirage获得巨大成功之前 - 我只是将我想要的API的输出复制到海市蜃楼灯具并且效果很好。
现在我有使它与真正的API一起工作的问题。
我在配置第一禁用海市蜃楼/ environment.js
ember g adapter filter
import ApplicationAdapter from './application';
export default ApplicationAdapter.extend({
findAll: function(store, type, label) {
var url = `${this.host}/${this.namespace}/${type.modelName}`;
console.log(`${url}`);
return this.ajax(url, 'GET');
},
});
应用适配器看起来像这样
import DS from 'ember-data';
export default DS.JSONAPIAdapter.extend({
host: 'http://127.0.0.1:1234',
namespace: 'api',
headers: Ember.computed(function(){
return {"secret": "1234"};
})
});
而且这样当我输入/过滤器 app/routes/filter/index
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return this.store.findAll('filter');
}
});
我可以看到,网址是建行作为http://127.0.0.1:1234/api/filter
并没有404,但我得到的错误
Error while processing route: filter.index The adapter operation was aborted [email protected]://127.0.0.1:4200/assets/vendor.js:29616:15
和我不完全掌握灰烬督察IM的诀窍努力算出这个莫名其妙
,以前的工作(与幻影)我的滤镜模式是这样的:
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr(),
url: DS.attr()
});
API返回列表[{"id":1, "name": "namex", "url": "http://"},{"id":2, "name": "namey", "url": "http://"}]
我敢肯定,如果它的方式api返回数据,因为它不是“过滤器”,因为我以前有复数的问题。
编辑:这解决问题
import DS from 'ember-data';
export default DS.RESTSerializer.extend(
{
normalizeFindAllResponse(store, type, payload)
{
var data = [];
payload.forEach(
function(item, index, enumerable)
{
var ob = {};
Ember.set(ob, 'id', item.id);
Ember.set(ob, 'type', 'filter');
Ember.set(ob, 'attributes', item);
data[index]=ob;
console.log(data[index]);
}
);
return {
data: data
};
}
});
这几乎是修复,但不完全是。 我可以访问一些像名称这样的模型属性,但是里面有一个有3个数组的数组对象,其中2个是数组中间的一个是Getter(永远是这样),我无法再访问它作为它的数组了。所以即时通讯不知道这是否正确绑定到对象。此外,我无法对“数据”做任何事情,因为无论RESTAdapter在这里或那里我放哪都会忽略它,并要求具有数据/元/错误属性的对象......不知道它是否存在错误。
我将适配器更改为RESTAdapter,因为我建议我无法更改api输出,但这并没有帮助。关于中止仍然是一样的错误。我需要操纵api的数据吗?或者是否存在某种强制绑定? – BigRetroMike
更新了我的答案。通常'{“fitlers”:[{}]}'会来,但在你的情况下,你会忽略findAll,所以你可能会尝试'{“fitler”:[{}]}' – kumkanillam
我唯一的问题是,如果我设置'''出口默认值ApplicationSerializer.extend({0}}} normalizeFindAllResponse(store,type,payload){return {data:payload};}''我有错误告诉我需要'data''error'或'meta 'atribute,因为它需要你为jsonapi发布的结构,我在你写的适配器/ application.js中更改 – BigRetroMike