ember.js - Ember : computed property on ember-data store

标签 ember.js ember-data

我正在为登录用户设置“已保存项目”功能。我有 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 存储中。

如果该项目不在列表中(但可以添加)的示例: enter image description here

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

我在想,在管理整个应用程序中用户数据的 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/

相关文章:

javascript - ember.js:指定 Controller 内的组件

model - Ember.js:如何保存模型

ember.js - Ember Data 侧载属性被放置在模型上

jquery - Ember.JS 在组件中创建记录并添加到本地数据存储,或最佳实践解决方案

javascript - 如何在 Ember 中查找包含关联 promise 的记录?

ember.js - Ember 选择更改 contentBinding 的 id

node.js - 如何将我的 Node 脚本作为 ember 的构建任务之一运行?

javascript - Ember 数据: createObject with an initial async relationship value

javascript - 存储在数组中的 Ember.js 绑定(bind)模型

javascript - 使用 ObjectController 时,模型中的 Ember.js 数据不会传递到 View