【问题标题】:ember: computed property on ember-data storeember:ember-data 存储上的计算属性
【发布时间】:2018-05-24 06:51:26
【问题描述】:

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

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

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

});

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

我需要该模型的计算属性,因为任何时候在网站上显示产品时,UI 都需要反映该项目是否已经在 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() {

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

让我想知道这是否有充分的理由是不可能的;)我可能在这里“与框架作斗争”。任何帮助表示赞赏!

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您可以引入计算属性,它将返回商店中的所有项目并将该属性用于您的savedItemsList 计算属性。

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

    【讨论】:

    • 谢谢!这样可行。我需要做的一个小改动是将savedItemsList 上的返回值设为this.get('allSavedItemsList').map(item => item.id);,因为我认为allSavedItemsList CP 需要被引用才能执行。
    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2014-12-21
    • 2014-07-09
    • 1970-01-01
    • 2018-11-29
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多