#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>