Отправить событие открытия вызова из события ItemChanged окна данных

Я пытаюсь отправить для события Open окна из события ItemChanged DataWindow, используя: SUPER :: EVENT OPEN () в дополнение к открытому событию содержит «предок сценария», который мне также нужно запустить; Самому нужно перезапустить окно из события ItemChanged из DataWindow.

Надеюсь на вашу помощь.

Заранее спасибо.

С уважением,


person isidro ruiz    schedule 08.07.2013    source источник


Ответы (1)


Из вашего вопроса вытекает несколько вещей.

SUPER::EVENT OPEN() попытается вызвать событие Open для DataWindow, если оно вызывается из ItemChanged, а не из Window.

Я не уверен в этом на 100%, но я почти уверен, что сталкивался с проблемами, пытаясь вызвать предка одного скрипта из совершенно другого скрипта. Я не могу указать на документацию; Придется списать это на пережитые подозрения.

Не совсем понятно, что вам нужно, но если вы хотите вызвать Open окна (и я предложу иное ниже), и если сценарий Open окна либо расширяет сценарий предка, либо явно вызывает сценарий предка (как выше), явный вызов сценария предка не нужен и кажется мне потенциально нежелательным. Просто вызовите сценарий Open окна, которое вы пишете.

Это будет полностью зависеть от вашего кода, но из десятков систем, которые мне приходилось поддерживать, я никогда не предполагал, что запуск события Open окна приведет к «перезапуску» окна. Большинство систем, над которыми я работал, просто создавали неожиданное сочетание предыдущих и новых состояний. Кроме того, даже если бы я закодировал это с нуля, чтобы оно работало таким образом, я бы предположил, что следующий парень, который придет поддерживать мой код (после того, как я выиграл в лотерею и удалился на небольшой остров в южной части Тихого океана), будет кодировать в способ, который имел для него смысл, основанный на других системах, над которыми он работал, но испортил бы мои предположения. Если бы мне нужно было «перезапустить» окно, я бы либо:

  • закройте окно и снова опубликуйте Open() (функция, а не событие) окна
  • создайте событие ue_ResetWindow, надеюсь, закодировав его так, чтобы Open мог его использовать, что сделало очевидным, что все, что добавляется к окну, также должно поддерживаться в этом скрипте.

(Из двух последних, ИМХО, было бы намного лучше взаимодействие с пользователем и кодирование.)

Удачи,

Терри.

person Terry    schedule 08.07.2013
comment
Как правило, вызывать встроенные события из вашего кода — плохая идея, за исключением использования ключевого слова SUPER:: для вызова скрипта-предка. Даже это подозрительно, потому что это может быть обход кода фреймворка. Я помечаю каждый найденный сценарий события, который переопределяет предка, с помощью // OVERRIDES ANCESTOR вверху. Код, который вызывает, например. cb_1.clicked не проходит экспертную оценку здесь. - person Hugh Brackett; 09.07.2013
comment
Хью хорошо заметил, что обычно это одно из моих увлечений, но на этот раз я пренебрег им. Сегодня вы можете подумать, что вам нужно вызвать всю логику, которая есть в событии Open, но в следующем месяце кто-то еще придет с чем-то, что нужно вызывать исключительно в том или ином случае, и более младший из персонал будет прыгать через обручи (например, устанавливать флаги), чтобы сохранить код там. Разбейте его сейчас, звоните из обоих мест, спасите себя в долгосрочной перспективе. - person Terry; 12.07.2013