Как только появляеться событие BaseWorkspaceOnShow в описание wnd_IncidentsWorkspaceScript, не выполняютсься код события BaseWorkspaceOnShow в scr_BaseWorkspace, очень неожиданно.
1) Как я должен догадаться, что нажав два раза в поле события OnShow, где есть запись wnd_BaseWorkspaceOnShow я отписываюсь от события прописанного в шаблоне scr_BaseWorkspace унаследованного окна? (ссылка на описание модели событий, наследования в террасофт, книга по JS, после прочтения которой это понятно)
2) Как программировать с таким поведением, руками в новом событие вызвать событие с унаследованного шаблона? (пожалйста пример кода, банальное подключение src файла и вызов нужной функции с аргументом Window не работает)
Нравится
1) Ну не знаю как для вас, но по-моему это очевидно.
Окно это как класс. Вы когда наследуете класс и создаете одноименную функцию в потомке, что должно происходить? По вашему должно отрабатываться две функции?
2) Такое сплошь и рядом (постоянно на OnPrepare). Названия не обязательно должны отличатся, но тогда прописывайте перед этим из какого скрипта брать
function wnd_BaseWorkspaceOnShow(Window) { scr_BaseWorkspace.wnd_BaseWorkspaceOnShow(Window); }
Спасибо. Работает. Что я должен был прочесть, что бы понять, что среляю себе в ногу? После C# и VisualStudio такое поведение неожиданное.
"Сазанов Александр Владимирович" написал:1) Ну не знаю как для вас, но по-моему это очевидно.
Окно это как класс. Вы когда наследуете класс и создаете одноименную функцию в потомке, что должно происходить? По вашему должно отрабатываться две функции?
Писать ключевое слово перегрузка или затемненение иначе сообщение о кривом коде(C#). Ну и модель событий обычно такая: есть событие(ссылка на массив типизированных функций) и есть функции которые подписанны на это событие. И все подписанные функции поочереди выполняються при вызове события.
"Борисов Михаил Евгеньевич" написал:Что я должен был прочесть, что бы понять, что среляю себе в ногу
http://javascript.ru/ecma
"Андросов Дмитрий" написал:Борисов Михаил Евгеньевич пишет:
Что я должен был прочесть, что бы понять, что среляю себе в ногу
Что то не увидел ни событий ни event, обещаю посомтреть еще позже. Ну а пока обычный браузерный ламповый JS:
elem.attachEvent("onclick", handler);
elem.attachEvent("onclick", handler2);
Тут про события http://javascript.ru/tutorial/events.
Но я так понял, что в террасофте в окне на событиях, задаются не события, а метод, который должен отрабатываться, когда событие произойдет.
"Сазанов Александр Владимирович" написал:
Установка обработчика:
element.attachEvent( "on"+имя события, обработчик)
Удаление обработчика:
element.detachEvent( "on"+имя события, обработчик)
Никого не буду агетировать, что делать надо именно так, а не нипосредственным присваиванием с перетиранием того что было присвоено до.
Все верно. Это не событие, а методе не делегаты. Это же JScript :)
По сути, ядро шлет в клиент сигнал, карточка окна была закрыта. Клиент может обработать это событие. Обработчик реализован в базовом окне редактирования, от которого наследовано текущее окно. Если Вы желаете переопределить метод базового окна, при этом выполнить и его, конечно же Вам нужно вызвать:
function MyFunc() { base.MyFunc(); //some logic }
ps: пример утрирован
"Олейник Дмитрий" написал:По сути, ядро шлет в клиент сигнал, карточка окна была закрыта
мне кажется, что обработчики событий реализованы в ядре - и в настройках объектов мы пишем названию функции (кому хочется - метода) из присоединенного скрипта, которая уже и вызывается.
А если в присоединенном скрипте этой функции (метода) нет - тогда смотрится в родительских. Или в присоединенных, а родительские просто присоединены неявно?
У каждого визуально/невизуального компонента (описаны в ядре), есть набор событий (генерируются и обрабатываются в ядре). Но в конфигурации мы дополнительно можем обработать это событие (как раз таки через +=, т.е ядровый код, и конфигурационный). Так вот, если компонент наследован, то спрева конечно система смотрит если ли обработчики в скрипте текущего объекта - выполняет их, если нету, и только если нету - выполняет базовые.