在视图中不可用的ember属性,只有ID

时间:2016-05-12 15:45:58

标签: javascript json ember.js ember-cli json-api

毋庸置疑,是Ember的新手,只是想要完成一个概念验证。已经对EmberCLI有了一些帮助,但对我来说这是一个新的奇怪。

/routes/index.js

export default Ember.Route.extend({
  model() {
   return this.store.findAll('skill');
}});

/models/skill.js

import Model from 'ember-data/model';

export default Model.extend({
  name: DS.attr('string'),
  desc: DS.attr('string'),
  type: DS.attr('string')
});

/adapters/application.js

import DS from "ember-data";
export default DS.JSONAPIAdapter.extend({
  namespace: 'v1',
  host: 'http://edu-api.app:8000',
});

/serializers/application.js

import DS from "ember-data";
export default DS.JSONAPISerializer.extend({});

/templates/index.hbs

    <h2>Skills</h2>
    <ul>
      {{#each model as |item|}}
    <li>
    <div>
      <li>{{item}} {{item.id}} {{item.type}} {{item.name}} {{item.desc}}</li>
    </div>
    </li>
    {{/each}}
    </ul>

似乎id attr可用且正确,但是所有其他的attrs都没有从json加载。如果我复制/粘贴json并在模型中手动设置它,它会按预期工作,那么当来自模型存储或序列化器时是否会进行一些过滤?

1 个答案:

答案 0 :(得分:1)

对于简单的JSON / REST后端,JSONAPISerializerJSONAPIAdapter ,但对于完全JSONAPI兼容的后端,<{p}}

你说当你复制&amp;粘贴并将其设置在模型上,所以可能你的意思是这样的:

this.store.createRecord('skill', {
    id: '1',
    name: 'foo',
    desc: 'bar',
    type: 'baz'
});

这确实适用于模型创建,但JSONAPI兼容的响应!在JSONAPI中你会有这样的东西(如果请求应该返回多个实体:

{
    data: [{
        id: '1',
        attributes: {
            name: 'foo',
            desc: 'bar',
            type: 'baz'
        }
    }]
}

所以现在你有两个选择:

  1. 使您的API JSONAPI兼容,或
  2. 使用不同的适配器&amp;串行器。
  3. RESTSerializer / RESTAdapter是一个简单的默认实现,可以处理这样的结构:

    {
        id: '1',
        name: 'foo',
        desc: 'bar',
        type: 'baz'
    }
    

    它们也是高度可定制的。

    查看official API以获取文档。