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 依赖注入框架的信息,它们为您提供了所有这些神奇的功能。还可以使用生成器获取文件,它可以帮助您正确放置文件。