【问题标题】:Ember, hasMany and belongsTo doesn't workEmber、hasMany 和 belongsTo 不起作用
【发布时间】:2016-04-02 11:24:16
【问题描述】:

我尝试了一个简单的 emberapp 来显示一些用户数据。

我的 API 返回这个 json:

{
   "roles":[
      {
         "id":5,
         "name":"admin",
         "alias":"Administrator",
         "users":[
            {
               "id":1,
               "username":"Evolutio",
               "email":"mail@evolutio.tld",
               "display_role":"Administrator"
            }
         ]
      },
      {
         "id":2,
         "name":"user",
         "alias":"Benutzer",
         "users":[

         ]
      },
      {
         "id":1,
         "name":"banned",
         "alias":"Gesperrt",
         "users":[

         ]
      },
      {
         "id":3,
         "name":"mod",
         "alias":"Moderator",
         "users":[

         ]
      },
      {
         "id":4,
         "name":"support",
         "alias":"Supporter",
         "users":[

         ]
      }
   ]
}

我的用户/model.js:

import DS from 'ember-data';

export default DS.Model.extend({
  username: DS.attr('string'),
  email: DS.attr('string'),
  display_role: DS.attr('string'),

  roles: DS.belongsTo('role'),
});

和我的角色/model.js

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  alias: DS.attr('string'),

  users: DS.hasMany('user'),
});

使用此设置后,我的开发者控制台中出现此错误:

Error while processing route: team.index Assertion Failed: Passing classes to store methods has been removed. Please pass a dasherized string instead of undefined EmberError@

我没有弄错。也许任何人都可以帮助我。

【问题讨论】:

    标签: javascript ruby-on-rails ember.js ember-data


    【解决方案1】:

    您需要旁加载数据并使您的 API 像这样返回数据:

      {
         "users": [{
            "id": 1,
            "username": "Evolutio",
            "email": "mail@evolutio.tld",
            "display_role": "Administrator",
            "roles": [5]
         }],
         "roles": [{
            "id": 5,
            "name": "admin",
            "alias": "Administrator",
            "users": [1]
         }, {
            "id": 2,
            "name": "user",
            "alias": "Benutzer",
            "users": []
         }, {
            "id": 1,
            "name": "banned",
            "alias": "Gesperrt",
            "users": []
         }, {
            "id": 3,
            "name": "mod",
            "alias": "Moderator",
            "users": []
         }, {
            "id": 4,
            "name": "support",
            "alias": "Supporter",
            "users": []
         }]
      }
    

    如果您必须像以前那样嵌入数据,您可能需要查看 EmbeddedRecordsMixin[http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html]

    但我想提出几点建议:

    1) 跟随 json-api(http://jsonapi.org/),因为 ember 数据跟随它并开箱即用地支持它(我认为从 1.13.0 版开始)

    2) 接受或放弃的想法 - 我不知道您的要求,但理想情况下,用户模型与角色有很多关系。所以我会像这样做一些不同的事情:

    //user/model.js:
    import DS from 'ember-data';
    
    export default DS.Model.extend({
      username: DS.attr('string'),
      email: DS.attr('string'),
      //display_role: DS.attr('string'),//you don't need this, since user can have multiple roles and also you can access it from the user model itself by doing model.roles.forEach((role)=>{ role.alias or role.name})
      roles: DS.belongsTo('role')
    });
    
    
    //role/model.js
    import DS from 'ember-data';
    
    export default DS.Model.extend({
      name: DS.attr('string'),
      alias: DS.attr('string')
    });
    

    因为通常角色比用户少,而且您不希望在一次请求调用中加载所有数据(角色和用户)。

    【讨论】:

    • 感谢您的回答,但这不是我想做的。我尝试制作一个团队页面,这里的用户列在用户组中。
    • 他的回答是完全正确的,你能不能试着概括一下,它怎么不能解决你原来的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多