Ember.js嵌入式记录无法正常工作

时间:2015-09-23 16:21:57

标签: ember.js ember-data ember-cli

我有一个喜欢

的json
{
   "meta":{
      "per":20,
      "page":1,
      "total":2
   },
   "users":[
      {
         "id":119506,
         "first_name":"erglk",
         "last_name":"wfe",
         "email":"bent@exemple.com",
         "groups":[
            {
               "id":5282,
               "name":"test"
            },
            {
               "id":8880,
               "name":"everybody"
            }
         ]
      },
      {
         "id":119507,
         "first_name":"eriglk",
         "last_name":"wife",
         "email":"benit@exemple.com",
         "groups":[
            {
               "id":5284,
               "name":"testf"
            },
            {
               "id":8880,
               "name":"everybody"
            }
         ]
      }
   ]
}

目前访问用户没有问题,但访问groups数组时遇到了一些困难。我已经尝试hasManybelongsTo但没有成功。我有错误。 我读过很少关于EmbededRecordMixin但没有任何成功的文章。

如果我在我的模特中宣布:

export default DS.Model.extend({
  first_name: DS.attr('string'),
  last_name: DS.attr('string'),
  email: DS.attr('string'),
  groups: DS.attr('group')
});

我得到:处理路由时出错:用户断言失败:无法找到' group'错误:断言失败:无法找到' group'

的转换

2 个答案:

答案 0 :(得分:2)

我们使用DS.attr告诉Ember该字段是模型的属性,并且可选地我们可以指定此属性的类型。默认情况下,只允许的类型为stringnumberbooleandate。要支持自定义类型,应定义特殊类(转换)。这是Embers试图通过此错误消息告诉您的内容。如何定义这样的类,您可以找到here

,您不需要为您的任务定义自定义转换。您需要定义关系:

export default DS.Model.extend({
  first_name: DS.attr('string'),
  last_name: DS.attr('string'),
  email: DS.attr('string'),
  groups: DS.hasMany('group', {async: false})
});

并使用EmbeddedRecordMixin,如官方docs中所述。我可以向你保证,它的工作原理如此。

答案 1 :(得分:1)

我遇到了同样的问题,并找到了Gennady& amp; Beni的回应,但我仍需要一段时间才能起床和跑步。

请参阅http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html

我创建了app / serializers / user.js:

import DS from 'ember-data';
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
    isNewSerializerAPI: true,
    attrs: {
        groups: { embedded: 'always' },
    }
});

并在app / model / user.js

export default DS.Model.extend({
     groups: DS.hasMany('group', {async: false}),
});

然后模型立即加载了嵌入的属性!