ember:ember-data store

时间:2017-12-10 17:03:02

标签: 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都需要反映该项目是否已经存在于saveditem余烬数据存储中。

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

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

我在想我的userprofile服务管理用户在应用程序中的数据,我可以有一个计算属性,从saveditem模型中输出一组id:< / p>

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.[]',带有和不带数组括号的排列,以及没有依赖键 - 都没有用。

让我想知道这是不是因为一个充分的理由是不可能的;)我可能会&#34;对抗框架&#34;这里。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

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

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

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