Сигнальные

С сигнальными функциями несколько проще. Они генерируются либо самим sFF, либо DOM, и привязаны к сигналам. Описание разницы между ними сделано выше.

Сигнальные функции, кроме on_app_afterCreate, могут быть удалены, но не должны создаваться пользователем вручную, а только в результате нажатия на событие в секции Signal Редактора свойств.

Эта рекомендация существует для исключения возможности ошибки при написании программистом названия функции. Если программист принципиально будет писать руками по всем правилам имя функции on_Button_0_pane_click и сохранит её, сигнал click кнопки Button_0 обзаведётся таки функционирующим обработчиком, хотя это и будет несколько странно.

В сигнальные функции, порождённые событиями, в виде аргумента приходит JS-объект события event. Не будем сейчас погружаться в рассмотрение природы и функционирования объектов событий (всё это описано здесь и здесь ), просто приведём пример.

Кладём в модуль компонент Label, служащий для отображения информации. Выбираем root. Нажатием на событие Signal.mousemove создаём обработчик и пишем в нём

$_GC("Label_0").comp.Label.text=`X = ${event.clientX} , Y = ${event.clientY}`;

Теперь, при движении мыши по окну приложения, мы видим изменяющиеся координаты мыши, относительно root.

В действительности, по реализации сигнальные функции - это обычные пользовательские функции sFF. И вызываться пользователем они могут точно так же. Создадим кнопку и запишем в Signal.click следующее:

Вопреки ожиданиям, обработчик on_root_pane_mousemove вывел координаты мыши

, хотя функция была вызвана пользователем, а не событием, и в неё не был передан параметр event. В окне Инструментов разработчика виден сам объект MouseEvent. Это - последний event от on_Button_0_pane_click, который был подобран on_root_pane_mousemove при всплытии.

Теперь тот же самый код, что и при нажатии пишем в событии кнопки Signal.afterCreate, перезагружаем, стараясь не двигать мышью по root. Теперь видим иную картину

, а в консоли наблюдаем Event, оставшийся от XMLHttpRequest на момент загрузки данных sFB при запуске приложения, являющийся истинным событием, вызывашим из глубин колбэков http-обращений к серверу и функций запуска приложения программное событие Signal.afterCreate кнопки, и в котором, естественно, никаких координат мыши нет. Так что ручной вызов обработчиков событий - действие непредсказуемое по своим результатам.

Если программист всё же непременно желает вызвать обработчик, то он должен сгенерировать событие методами JS

Теперь изменим запись Button_0.Signal.afterCreate таким образом:

($_GF("on_root_pane_mousemove")() вызывать не нужно - обработчик будет вызван автоматически при обнаружении события), и в результате увидим следующее:

В консоли появится вывод event, который стал теперь настоящим MouseEvent, но не совсем: его ключ isTrusted имеет значение false, указывающее на то, что событие было сгенерировано не системой, а кодом.

Last updated