提问者:小点点

Ember数据关系未解决


我还在学习ember. js,遇到了一个障碍,因为灰烬数据不能解决模型中的查找关系。我有一个模型“站点”,它基本上是每个其他模型的查找表,以根据位置区分数据。

在这一点上,我做错了什么,或者错过了一个关键概念——可能两者都有…(或者可能是凌晨!)

站点模型(即查找表)

import DS from 'ember-data';

export default DS.Model.extend({
    code: DS.attr(),
    name: DS.attr(),
});

网站模型将与我所有其他模型有许多关系(完成后约为12个)

准模特

import DS from 'ember-data';
import { belongsTo } from 'ember-data/relationships';

export default DS.Model.extend({
    site: belongsTo('site'),
    last: DS.attr(),
    first: DS.attr(),
    active: DS.attr('boolean'),

fullName: Ember.computed('first', 'last', function() {
  return `${this.get('first')} ${this.get('last')}`;
  }),
});

在其他一些模型中,“关联模型”也将与“站点”一起查找。

我通过JSONAPI规范提供数据,但我不包括关系数据,因为据我所知,余烬数据应该使用站点id属性下拉站点数据。

{
    "links": {
        "self": "/maint/associates"
    },
    "data": [
        {
            "type": "associate",
            "id": "1",
            "attributes": {
                "site": "6",
                "last": "Yoder",
                "first": "Steven",
                "active": "1"
            },
            "links": {
                "self": "/associates/1"
            }
        }
    ]
}

在我的模板文件中,我引用associate.site这给我一个错误。

如果我使用关联. code或.name来匹配站点模型,则模板中不会显示任何内容。“站点”表中的代码是我真正想在模板中显示的数据。

所以显而易见的问题是:

>

  • 我认为Ember Data应该解决这个问题是错误的,还是我需要将关系包含在我的API响应中?

    我意识到,当我想要site. code时,我在“关联”模型中的物品只引用站点,那么如何使这种关系为人所知或访问“关联”模型中的字段呢?

    我没有在“站点”模型中包含has多关系,因为会有很多关系。我需要在其他模型中做逆关系吗?我看到的例子并不都显示了has多关系设置。

    当我在灰烬检查器中查看模型时,模型中不包含站点字段。即使我没有得到正确的数据,它还应该显示吗?

    到目前为止我喜欢灰烬,只需要理解并克服这个障碍

    更新:我的后端JSON库只会根据当前规范生成关系链接

    "related": "/streams/1/site"
    

    但是余烬数据确实调用

    "相关":"/站点/1"

    来解决关系

    因此,如果您按照Adam Cooper的回答生成链接,或者您只能根据当前规范生成链接,则@Adam Cooper的回答是正确的。


  • 共1个答案

    匿名用户

    如果您使用的是默认的JSONAPIAdapter,您希望您的响应如下所示:

    {
      "links": {
        "self": "/maint/associates"
      },
      "data": [{
        "type": "associate",
        "id": "1",
        "attributes": {
          "last": "Yoder",
          "first": "Steven",
          "active": "1"
        },
        relationships: {                  
          "site": {
            "links": {  
              related: "/sites/6"
            }
          } 
        }
      }]
    }
    

    这将允许Ember数据通过它的关系查找站点。现在Ember正在尝试访问Ember数据无法填充的站点模型,因此出现了错误。顺便说一句,你可能也可以为active返回一个实际的布尔值。