retejs / rete

JavaScript framework for visual programming
https://retejs.org
MIT License
9.86k stars 647 forks source link

Событие когда control обновляет значение #277

Closed shift-reality closed 5 years ago

shift-reality commented 5 years ago

Есть какое-то событие, типа controlupdatedvalue? Поясню: есть InputControl (по названию понятно чем он занимается), есть события создания/удаления ноды/соединения, необходимо как-то добавить событие обновления значения... Подскажите, плиз

Ni55aN commented 5 years ago

нет, все контролы создаются собственными "силами". Все, чт предоставляется, это getData, putData и добавление контрола в ноду или инпут.

события создания/удаления ноды/соединения находятся в одной, так называемой, шине событий - это Editor. В нем можно указать свои события через bind(<имя события>), но это не похоже на ваш случай, так как контрол изолирован в ноде, а значит она может подписаться на его события, а он при изменении значения будет эмитить событие.

Есть вот такой пример http://jsfiddle.net/Ni55aN/6tLo2nbe/

shift-reality commented 5 years ago

Спасибо за пример... но что-то похоже на костыль? как по мне..?

Еще спросить хотел, а есть где-то эти стили с картинки: https://github.com/retejs/rete/issues/1 ?

Ni55aN commented 5 years ago

нет, это скрин из Blender

но что-то похоже на костыль? как по мне..?

уточнаяйте вашу задачу и убирайте лишнее

shift-reality commented 5 years ago

уточняю: мне нужно сделать автосохранение в json, если что-то (сдвиг ноды, удаление, связи, смена значений input и т.д.) где-то изменилось... Может есть решение из коробки? Сделали примерно так: "nodecreated", "noderemoved", "connectioncreated", "connectionremoved" editor.on(autosaveEvents, async function () { await se.req('put', await se.editor.toJSON()); }); Но, для InputControl события не хватило... Вы лучше знаете свою архитектуру, посоветуйте, как лучше сделать, чтобы в итоге не костыль получился?...

Ni55aN commented 5 years ago

Тогда глобальное событие сойдет

editor.bind('change');

editor.on("nodecreated noderemoved connectioncreated connectionremoved", () => {
   editor.trigger('change')
});

editor.on('change', () => {
   // to json
});

и соответственно внутри контрола при изменении: this.emitter.trigger('change')

shift-reality commented 5 years ago

Работает, спасибо!