这里是我的情况,简化为: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。 –