Создание событий при помощи trackChanges
Пытаюсь создать событие при изменении переменной при помощи пакета TrackChanges. Но вылетает ошибка "This name is already being used" при попытке создать observer даже для самой простой переменной:
const TrackChanges = require('track-changes-js');
const trackChanges = new TrackChanges();
const CreateTemplate = (nTitle, imageSrc, ElementType, Selector) => {
let a = 1;
trackChanges.addObserver('obs', () => a);}
В чем может быть проблема?
Ответы (3 шт):
Если смотреть документацию, которая указывает что вам нужно указать имя обзерверу
trackChanges.addObserver('obs_' + nTitle, () => a); // используйте что-то уникальное
trackChanges.addHandler('obs_' + nTitle, nTitleHandler);
Вы добавляете постоянно addObserver с именем obs для переменной a. Я думаю что вам нужно определять новый обзервер для каждого нового случая. А у вас постоянно один obs
Вынесла объявление observer из функции, а хэндлер можно объявлять в ней. Это решило проблему
Спасибо за использование моей библиотеки)
Внесу ясности.
Наблюдатель должен иметь уникальное имя. Библиотека во имя производительности использует одно хранилище где лежат эти имена наблюдателей.
Ваша проблема в том что у вас уже есть наблюдатель с именем 'obs' в другом месте, или файле.
Обьявление наблюдателя:
trackChanges.addObserver('observer', () => value);
Первый аргумент, имя наблюдателя. (observer)
Второй аргумент, наблюдаемая сущность которую возвращет функция (value)
После этого вы можете добавить обработчик, их можно создавать неограниченое количевство.
Первый аргумент, имя созданого наблюдателя (observer)
Второй аргумент, колбэк который вызывается при изменении сущности, аргументом будет измененная сущность.
trackChanges.addHandler('observer', (changes) => console.log(changes));
trackChanges.addHandler('observer', (changes) => console.table({changes}));
