Я настраиваю класс для добавления товаров в корзину. Элементы корзины хранятся в карте (). Теперь я хочу сохранить элементы в виде файлов cookie, каждый раз, когда карта меняется. Поэтому, когда я вызываю map.set () или map.delete (), я хочу запустить функцию сохранения. Но я хочу, чтобы это вызывалось автоматически не в каждой строке кода, где происходит «изменение материала».
Я уже пытался использовать прокси, но так как мне нужно поддерживать хотя бы IE11, я не могу его использовать.
import Product from "./product";
export default class Cart {
constructor() {
this.items = new Map();
}
watchForChanges(id) {
// watch if this.item is changed
// call saveItem if is changed
}
saveItem () {
// save item
}
addItem(id, count, callback) {
if (this.items.has(id)) {
this.items.get(id).count += count;
callback( this.items.get(id) );
return true;
}
this.newItem(id, count, callback);
}
newItem(id, count, callback) {
let product = new Product(id);
product.then((resolvedProduct) => {
this.items.set(id, {} = resolvedProduct );
this.watchForChanges(id);
callback(this.items.get(id));
}).catch((reject) => {
Error("Network Error")
});
}
removeItem(id, count = this.items.get(id).count, callback) {
if (!this.items.has(id)) return false;
let newCount = this.items.get(id).count -= count;
if (newCount <= 0) this.items.delete(id);
callback();
}
//some more functions
}
Прямо сейчас я могу вызывать saveItem () каждый раз, когда что-то меняю. Как я могу создать что-то вроде eventListener для установки и удаления элементов в Map ();