Как только появляеться событие BaseWorkspaceOnShow в описание wnd_IncidentsWorkspaceScript, не выполняютсься код события BaseWorkspaceOnShow в scr_BaseWorkspace, очень неожиданно.

1) Как я должен догадаться, что нажав два раза в поле события OnShow, где есть запись wnd_BaseWorkspaceOnShow я отписываюсь от события прописанного в шаблоне scr_BaseWorkspace унаследованного окна? (ссылка на описание модели событий, наследования в террасофт, книга по JS, после прочтения которой это понятно)
2) Как программировать с таким поведением, руками в новом событие вызвать событие с унаследованного шаблона? (пожалйста пример кода, банальное подключение src файла и вызов нужной функции с аргументом Window не работает)

Нравится

12 комментариев

Название обработчика вот здесь

должно отличаться от wnd_BaseWorkspaceOnShow и в вашей функции должен быть вызов уже wnd_BaseWorkspaceOnShow :

function wnd_TasksWorkspaceOnShow(Window) {
	wnd_BaseWorkspaceOnShow(Window);
}

1) Ну не знаю как для вас, но по-моему это очевидно.
Окно это как класс. Вы когда наследуете класс и создаете одноименную функцию в потомке, что должно происходить? По вашему должно отрабатываться две функции?
2) Такое сплошь и рядом (постоянно на OnPrepare). Названия не обязательно должны отличатся, но тогда прописывайте перед этим из какого скрипта брать

function wnd_BaseWorkspaceOnShow(Window) {
    scr_BaseWorkspace.wnd_BaseWorkspaceOnShow(Window);
}

Спасибо. Работает. Что я должен был прочесть, что бы понять, что среляю себе в ногу? После C# и VisualStudio такое поведение неожиданное.

"Сазанов Александр Владимирович" написал:1) Ну не знаю как для вас, но по-моему это очевидно.
Окно это как класс. Вы когда наследуете класс и создаете одноименную функцию в потомке, что должно происходить? По вашему должно отрабатываться две функции?

Писать ключевое слово перегрузка или затемненение иначе сообщение о кривом коде(C#). Ну и модель событий обычно такая: есть событие(ссылка на массив типизированных функций) и есть функции которые подписанны на это событие. И все подписанные функции поочереди выполняються при вызове события.

"Борисов Михаил Евгеньевич" написал:Что я должен был прочесть, что бы понять, что среляю себе в ногу

http://javascript.ru/ecma

Михаил, если возникнут доп. вопросы - обращайтесь.

"Андросов Дмитрий" написал:Борисов Михаил Евгеньевич пишет:

Что я должен был прочесть, что бы понять, что среляю себе в ногу

http://javascript.ru/ecma


Что то не увидел ни событий ни event, обещаю посомтреть еще позже. Ну а пока обычный браузерный ламповый JS:
elem.attachEvent("onclick", handler);
elem.attachEvent("onclick", handler2);

Тут про события http://javascript.ru/tutorial/events.
Но я так понял, что в террасофте в окне на событиях, задаются не события, а метод, который должен отрабатываться, когда событие произойдет.

"Сазанов Александр Владимирович" написал:

http://javascript.ru/tutorial/events

Установка обработчика:
element.attachEvent( "on"+имя события, обработчик)
Удаление обработчика:
element.detachEvent( "on"+имя события, обработчик)

Никого не буду агетировать, что делать надо именно так, а не нипосредственным присваиванием с перетиранием того что было присвоено до.

Все верно. Это не событие, а методе не делегаты. Это же JScript :)

По сути, ядро шлет в клиент сигнал, карточка окна была закрыта. Клиент может обработать это событие. Обработчик реализован в базовом окне редактирования, от которого наследовано текущее окно. Если Вы желаете переопределить метод базового окна, при этом выполнить и его, конечно же Вам нужно вызвать:

function MyFunc() {
base.MyFunc();
//some logic
}

ps: пример утрирован

"Олейник Дмитрий" написал:По сути, ядро шлет в клиент сигнал, карточка окна была закрыта

мне кажется, что обработчики событий реализованы в ядре - и в настройках объектов мы пишем названию функции (кому хочется - метода) из присоединенного скрипта, которая уже и вызывается.
А если в присоединенном скрипте этой функции (метода) нет - тогда смотрится в родительских. Или в присоединенных, а родительские просто присоединены неявно?

У каждого визуально/невизуального компонента (описаны в ядре), есть набор событий (генерируются и обрабатываются в ядре). Но в конфигурации мы дополнительно можем обработать это событие (как раз таки через +=, т.е ядровый код, и конфигурационный). Так вот, если компонент наследован, то спрева конечно система смотрит если ли обработчики в скрипте текущего объекта - выполняет их, если нету, и только если нету - выполняет базовые.

Показать все комментарии