我正在建造一个Ember应用程序“ember-cli”:“2.4.3”,坐在Laravel / Lumen上,似乎无法正确连接电线。我也尝试兼容API服务器JSON-API,因此如果有问题,我可以访问更改语法。
如果我删除导出默认DS.JSONAPISERIALIZER,我会ember.debug.js:32116 TypeError: typeClass.eachTransformedAttribute is not a function
有了它,我通常会得到Assertion Failed: You tried to load all records but your adapter does not implement findAll
如果我从路线中拨打getJSON(...)
,而不是为商店调用数据,那么它可以正常工作,并按预期显示在视图中。
我尝试过其他适配器,但我认为符合JSON-API标准我需要使用JSONAPIADAPTER。任何帮助都会很棒。
的application.js
import DS from "ember-data";
export default DS.JSONAPIAdapter.extend({
namespace: 'v1',
host: 'http://edu-api.app:8000',
});
export default DS.JSONAPISerializer.extend({
//in preparation of underscores in returned data
// keyForAttribute: function(attr) {
// return Ember.String.underscore(attr);
// },
// keyForRelationship: function(attr) {
// return Ember.String.underscore(attr);
// }
});
skill.js
import DS from 'ember-data';
var App = window.App = Ember.Application.extend();
var attr = DS.attr;
App.Skill = DS.Model.extend({
name: attr("string"),
desc: attr("string")
});
index.js
export default Ember.Route.extend({
model() {
//return this.store.findAll('skill'); //<- Assertion Failed: You tried to load all records but your adapter does not implement `findAll`
this.get('store').findAll('skill'); //<- Assertion Failed: You tried to load all records but your adapter does not implement `findAll`
//return Ember.$.getJSON('http://edu-api.app:8000/v1/skills'); //<- works, and properly displays data to view
}
});
答案 0 :(得分:0)
我认为您在理解ember-cli
时遇到问题。
首先,您不要将适配器和序列化程序放在同一个文件中。也许使用生成器来获取像ember generate serializer application
这样的默认文件。
您的应用程序序列化程序转到app/serializers/application.js
,您的适配器转到app/adapters/application.js
。
接下来这条线看起来真的错了:
var App = window.App = Ember.Application.extend();
这会创建一个新应用,但您只应在app/app.js
中执行此操作。接下来,您将使用全局导出,从不在ember-cli
应用中执行的操作。
要指定模型,您需要在models/skill.js
下找到您的文件。在那里,您不能将新模型附加到全局导出的App
App.Skill = DS.Model.extend({
,而是将其导出为默认导出,如export default DS.Model.extend({
。
如果index.js
位于routes/
下,则A
看起来正确。
我强烈建议您阅读有关ember解析器和ember依赖注入框架的更多信息,这些框架可以为您完成所有这些魔法。还可以使用生成器来获取文件,它可以帮助您正确放置文件。