Я строю магазин в Ember со списком товаров, которые добавляются в Local Storage, когда пользователь нажимает кнопку add to cart . Каждый продукт - это объект со свойством 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);
}
Я использую надстройку Local Storage (https://github.com/funkensturm/ember-local-storage#methods)
и у меня есть следующее действие:
actions: {
removeFromCart(){
this.get('cart').remove(this.product);
}
}
Когда я пытаюсь запустить следующий код, я получаю сообщение об ошибке:
Uncaught Error: Assertion Failed: Вы попытались обновить [ 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
не было обновлено в локальном хранилище.