Ember,JSONAPIAdapter,JSONAPISerializer,findAll不可用

时间:2016-05-10 16:49:12

标签: javascript json ember.js ember-cli

我正在建造一个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
  }
});

1 个答案:

答案 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依赖注入框架的更多信息,这些框架可以为您完成所有这些魔法。还可以使用生成器来获取文件,它可以帮助您正确放置文件。