這裏是我的情況,簡化爲:Ember用hasMany關係檢索一條記錄的計算屬性?
// model/price-source.js
export default DS.Model.extend({
price: DS.attr('number'),
product: DS.belongsTo('product')
)};
// model/product.js
export default DS.Model.extend({
priceSources: DS.hasMany('price-source')
)};
在我的產品模板,我希望能夠簡單地引用源用最低的價格,就像這樣:
// templates/products.hbs
{{#each model as |product|}}
<span>{{product.cheapestSource.price}} €</span>
{{/each}}
我怎麼會去關於設置cheapestSource計算屬性?我想我不得不做這樣的事情:
// model/product.js
cheapestSource: Ember.computed('priceSources', function() {
let sources = this.get('priceSources');
let cheapest = sources.get('firstObject');
// iterate over sources and set cheapest to whichever has the lowest price
return cheapest;
})
的問題是,我根本不知道如何通過的hasMany關係循環(除了使用把手{{#each}}幫手),和計算出的屬性是否可以包含來自另一個模型的單個Ember Data記錄。是否有消息來源,如果有的話,怎麼玩?
任何幫助和想法表示讚賞,謝謝。
我正在閱讀[作爲承諾的關係](https://guides.emberjs.com/v2.11.0/models/relationships/#toc_relationsships-as-promises)指南。我們可以像你一樣直接訪問它嗎?如果可能的話,在你的答案中解釋..只是爲了我的學習。謝謝。還有依賴鍵'priceSources。@ each.price'可能會有用。一旦你閱讀,我將刪除我的評論 – kumkanillam
我在控制器上做了這個,現在我明白你爲什麼要問這個問題,他在模型thx中做了檢查。 –
@ Sedad.Kosovac不幸的是沒有priceSource對象顯示出來(在Ember Inspector中)。我沒有得到錯誤。我嘗試了'return this.get('priceSources')。get('firstObject')',也試過'返回this.get('priceSources.firstObject')',但沒有。 因爲我將需要排序來源,更好的方法來獲得最便宜的可能是首先排序,然後檢索sortedSources計算屬性中的firstObject。 –