повторно используемый код события keydown — как я могу написать его один раз и использовать в любом месте моего приложения flex

#apache-flex #actionscript #conventions

#apache-flex #actionscript #соглашения

Вопрос:

Я новичок в flex framework.

Я создал приложение с использованием flex framework 4.1, в котором есть различные компоненты, которые отображаются конечному пользователю в виде всплывающего окна с помощью <mx:TitleWindow> .

Это окно заголовка закрывается либо нажатием кнопки закрытия (отображается в строке заголовка), либо нажатием клавиши escape на клавиатуре.

Я закодировал функциональность, в которой я закрываю текущее окно заголовка всякий раз, когда нажимается кнопка «escape». Вот что я сделал.
В keydown событии TitleWindow я вызвал эту функцию

 private function detectescapekeypress(event:KeyboardEvent):void
{
    if(event.charCode == Keyboard.ESCAPE)
       PopUpManager.removePopUp(this);
}
  

Но эта функция не работает, когда я определяю ее на главном начальном экране моего приложения и вызываю ее с помощью parentApplication.detectescapekeypress(event) в keydown событии TitleWindow

Мне пришлось повторять этот код для каждого TitleWindow, который я использовал в проекте.

Как я могу написать вышеуказанную функциональность только один раз и повторно использовать ее среди различных TitleWindow и других компонентов, чтобы код для одного и того же не повторялся в разных компонентах?

Примечание: Каждое TitleWindow, которое я использую, содержит различный код, скрипты и макет.

Спасибо

Ответ №1:

Почему бы вам просто не расширить компонент TitleWindow и не добавить эту функциональность в ваш новый пользовательский компонент? Затем используйте его везде вместо исходного TitleWindow.

Я предполагаю, что вы используете по крайней мере SDK 4.1, Создайте новый файл mxml с именем, например, CustomTitleWindow.mxml, и вставьте следующее http://www.copypastecode.com/68211 /

Затем измените все ваши окна заголовка на CustomTitleWindow.

P.S. Обратите внимание, что для отправки ключевого события компонент должен иметь фокус.

blz

Комментарии:

1. @Anton Petrov: Спасибо за ваше предложение, не могли бы вы, пожалуйста, уточнить свой ответ?

2. Вы можете поместить его, например, в новую папку под названием «view» в вашей папке src. Затем вы должны включить пространство имен в компонент, в котором вы хотите его использовать: в корневом теге: xmlns:view=»view.*» затем просто используйте <view:CustomTitleWindow> Если вы используете Flash Builder, он будет автоматически добавлен для вас при попытке автозаполнения <CustomTitleWindow

3. работает не так, как я хотел. Я хотел удалить повторение для той же функциональности, а не для самого компонента. titlewindow в каждом случае имеет разный макет, скрипты и код внутри него. Я сомневаюсь, как это может быть достигнуто. : (

4. Вы можете использовать свой пользовательский компонент так же, как вы используете TitleWindow. Просто включите общую функциональность в свой CustomTitleWindow, а затем, если вам нужны другие настраиваемые функции, просто продолжайте расширять компонент. Или вы можете попробовать задать для него некоторые свойства, состояния и т.д. Если я все еще не понял, пожалуйста, дайте мне более подробное и конкретное объяснение того, чего вы пытаетесь достичь.

5. хорошо, вот оно. Я создал компонент в каталоге components. написал в нем код для titlewindow. Затем я попытался вызвать этот пользовательский компонент в другом компоненте (который на самом деле будет всплывающим окном). Теперь, где я должен ввести свой код для отображения графического интерфейса и код actionscript после написания <компоненты:CustomTitleWindow width=»300″ title=»registration»></компоненты:CustomTitleWindow>