【发布时间】:2020-05-20 04:19:46
【问题描述】:
我正在 Ember 中建立一个商店,其中包含当用户单击
加入购物车按钮。每个产品都是一个具有名为ordered_quantity 的属性的对象,当用户尝试从购物车中删除产品时,我试图更改此属性的值。 (例如:ordered quantity: 8,单击按钮时应为7)。
我的服务文件中有以下代码:
remove(item) {
let new_arr = this.get('items');
let elementIndex = new_arr.findIndex(obj => {
return obj.id === item.id;
});
if (elementIndex !== -1) {
new_arr[elementIndex].ordered_quantity = new_arr[elementIndex].ordered_quantity - 1;
}
this.set('cart.items', new_arr);
}
我正在使用本地存储插件 (https://github.com/funkensturm/ember-local-storage#methods)
我有以下操作:
actions: {
removeFromCart(){
this.get('cart').remove(this.product);
}
}
当我尝试运行以下代码时出现错误:
未捕获的错误:断言失败:您尝试将 [object Object].ordered_quantity 更新为“7”,但它正在被跟踪上下文(例如模板、计算属性或观察者)跟踪。为了确保上下文正确更新,您必须在更新时使属性无效。您可以将该属性标记为
@tracked,或使用@ember/object#set来执行此操作。
我尝试使用这样的 set 函数:
let updated = item.ordered_quantity - 1;
set(item, 'ordered_quantity', updated);
https://api.emberjs.com/ember/release/functions/@ember%2Fobject/set 并且代码按预期工作没有错误,但我的属性 ordered_quantity 的值未在本地存储中更新。
【问题讨论】:
标签: javascript ember.js