ember:在 ember 数据存储上计算 属性

ember: computed property on ember-data store

我正在为登录用户设置 "saved item" 功能。我已经有了 (它将保存的项目列表与用户和产品相关联)。但是我在如何在我的 saveditem 模型上计算 属性 时遇到了问题。型号:

// saveditem.js model
export default DS.Model.extend({

    user: belongsTo('user'),
    product: belongsTo('product'),
    dateAdded: attr('string')

});

我目前正在使用产品 ID 作为该型号的 id

我需要在该模型上计算 属性,因为无论何时网站上显示产品,UI 都需要反映该项目是否已经在 saveditem ember-是否存储数据。

项目不在列表中(但可以添加)的示例:

列表中的项目示例(但可以删除):

我在想,在我的 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() {

(当然是在注入商店之后)。看起来很明显,但在 saveditem 存储中添加或删除记录时它不会更新。还尝试了 'store.saveditems.[]'、带和不带数组括号的排列以及没有依赖键 - 都没有用。

让我想知道这是否有充分的理由是不可能的 ;) 我可能 "fighting the framework" 在这里。任何帮助表示赞赏!

您可以引入计算 属性,它将 return 商店中的所有商品,并将 属性 用于您的 savedItemsList 计算 属性。

allSavedItemsList: computed(function() {
    return this.get('store').findAll('saveditem');
}),

savedItemsList: computed('allSavedItemsList.[]',function() {
    return this.get('store').peekAll('saveditem').map(item => item.id);
}),