gpt4 book ai didi

javascript - 在 Ember 的本地存储中,对象属性的值没有被更改

转载 作者:行者123 更新时间:2023-12-01 12:03:09 27 4
gpt4 key购买 nike

我正在 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);
}
}

当我尝试运行以下代码时,出现错误:

Uncaught Error: Assertion Failed: You attempted to update [object Object].ordered_quantity to "7", but it is being tracked by a tracking context, such as a template, computed property, or observer. In order to make sure the context updates properly, you must invalidate the property when updating it. You can mark the property as @tracked, or use @ember/object#set to do this.



我尝试使用这样的 set 函数:
let updated = item.ordered_quantity - 1;
set(item, 'ordered_quantity', updated);

https://api.emberjs.com/ember/release/functions/@ember%2Fobject/set并且代码按预期工作没有错误,但我的属性值 ordered_quantity未在本地存储中更新。

最佳答案

您需要调整 set对您的用例起作用:

remove(item) {
let new_arr = this.get('items');
let elementIndex = new_arr.findIndex(obj => {
return obj.id === item.id;
});

if (elementIndex !== -1) {
set(new_arr[elementIndex], 'ordered_quantity', new_arr[elementIndex].ordered_quantity - 1);
}
this.set('cart.items', new_arr);
}

关于javascript - 在 Ember 的本地存储中,对象属性的值没有被更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60055682/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com