2017-03-16 75 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