Ember、JSONAPIAdapter、JSONAPISerializer、findAll 不可用
Ember, JSONAPIAdapter, JSONAPISerializer, findAll not available
我正在构建一个 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,我需要使用 JSONAPI 适配器。任何帮助都会很棒。
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
}
});
我认为你的初级理解有问题 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/
之下,那么它看起来是正确的。
我强烈建议您阅读更多有关 ember 解析器和 ember 依赖注入框架的信息,它们为您提供了所有这些神奇的功能。还可以使用生成器获取文件,它可以帮助您正确放置文件。
我正在构建一个 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,我需要使用 JSONAPI 适配器。任何帮助都会很棒。
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
}
});
我认为你的初级理解有问题 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/
之下,那么它看起来是正确的。
我强烈建议您阅读更多有关 ember 解析器和 ember 依赖注入框架的信息,它们为您提供了所有这些神奇的功能。还可以使用生成器获取文件,它可以帮助您正确放置文件。