我正在为登录用户设置“已保存项目”功能。我有 modeling worked out已经(它将保存的项目列表与用户和产品相关联)。但我在如何在我的 saveditem
模型上拥有计算属性时遇到了麻烦。型号:
// saveditem.js model
export default DS.Model.extend({
user: belongsTo('user'),
product: belongsTo('product'),
dateAdded: attr('string')
});
我目前使用产品 ID 作为该型号的 id
。
我需要该模型的计算属性,因为每当网站上显示产品时,UI 都需要反射(reflect)该项目是否已在 saveditem
ember-data 存储中。
我在想,在管理整个应用程序中用户数据的 userprofile
服务上,我可以有一个计算属性,从 saveditem
模型输出一组 id :
savedItemsList: computed('WHAT.IS.DEPENDENT.KEY?.[]', function() {
return this.get('store').peekAll('saveditem').map(item => item.id);
}),
然后在模板中,我可以使用可组合的助手来查看所显示的项目是否在列表中:
{{#if (contains product.id userprofile.savedItemsList)}}
...show already-saved button...
{{else}}
...show save button...
{{/if}}
问题:这个计算属性的依赖键是什么?或者...这个方法很臭吗?有更好的方法吗?
我已经尝试过:
savedItemsList: computed('store.saveditem.[]', function() {
(当然是在注入(inject)商店之后)。看起来很明显,但当在 saveditem
存储中添加或删除记录时,它不会更新。还尝试了 'store.saveditems.[]'
、带或不带数组括号的排列以及无依赖键 - 都不起作用。
让我想知道这是否有充分的理由不可能;)我可能在这里“与框架作斗争”。任何帮助表示赞赏!
最佳答案
您可以引入计算属性,该属性将返回商店中的所有项目,并将该属性用于您的 savedItemsList
计算属性。
allSavedItemsList: computed(function() {
return this.get('store').findAll('saveditem');
}),
savedItemsList: computed('allSavedItemsList.[]',function() {
return this.get('store').peekAll('saveditem').map(item => item.id);
}),
关于ember.js - Ember : computed property on ember-data store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741231/