2017-03-16 55 views
1

我仍然在学习ember.js,并遇到一个包含ember数据而未解析模型中查找关系的障碍。我有一个模型“网站”,它基本上是每个其他模型的查找表,以区分基于位置的数据。Ember数据关系未解决

在这一点上,我做错了或丢失一个关键概念 - 既可能...(或者也许是凌晨小时!)

网站模式(即查找表)

import DS from 'ember-data'; 

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

该网站模式将不得不把所有其他车型的hasMany关系(将在约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')}`; 
    }), 
}); 

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

我提供了通过JSON API规范的数据,但我不包括关系数据,因为据我了解,烬数据应该是拉低使用本网站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,它给了我一个错误。

<(未知的mixin):ember431>

如果我使用associate.code或。名称相匹配的网站模式,什么都不会显示在模板中。 “网站”表中的代码是我真正想要在模板中显示的数据。

那么显而易见的问题:

  1. 我错了这灰烬数据应该解决这个还是我需要 包括在我的API响应的关系?

  2. 我意识到,我在“准”的模式属于关联只引用 网站,而我想site.code,所以如何使这种关系 已知或我的“准”的模式进入该领域?

  3. 我没有在'site'模型中包含hasMany关系,因为 会有很多。我需要在 其他模型中做相反的关系吗?我见过的例子并不都显示hasMany 关系的设置。

  4. 当我在余烬检查模型中看到模型中包含的网站字段不是 。即使我没有得到正确的数据 它应该仍然显示?

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

更新:我的后端JSON库只会产生关系链接基于当前的测试,这将是

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

但烬数据不会调用

“关联”: “/网站/ 1”

来解决关系

所以@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 Data无法填充的站点模型,因此会出现错误。顺便说一句,你可能也可以用返回一个实际的布尔值来激活它。

+0

我需要看看我的后端库,以确定如何更改json匹配。 – gmart

+0

你使用哪个后端库?您可能只能切换到其他适配器。 –

+0

抱歉点击输入太快。 php后端使用jsonapi by lode生成,Slim用于路由。 jsonapi生成: “self”:“/ streams/1/relationships/site” 它与当前的json API规范匹配。花了点时间来添加正确的路由。我想标记为答案,因为Ember现在正在请求数据,但是ember检查器显示空字段值的记录。控制台显示 记录与响应值,只是没有进入商店。 – gmart