Тимофей Давыдик, ответь правильно.Поскольку объект Application
отправляет событие, если вы хотите, чтобы ваш объект TestComponent
его перехватил, вы должны добавить прослушиватель к ссылке на объект Application
изнутри вашего TestComponent
.Вы можете использовать наследуемое свойство TestComponent
объекта "parentApplication", чтобы получить ссылку на Application
object`.
Изменить следующий код в TestComponent.mxml:
private function init():void
{
this.parentApplication.addEventListener(EnableChangeEvent.ENABLE_CHANGED, doFinalAction);
}// end function
[ОБНОВЛЕНИЕ]
Лично я чувствую, что вы используете неправильные способы использования событий, поэтому я создал аналогичное приложение flex, чтобы продемонстрировать, как использовать события в flex.
Main.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:components="components.*"
xmlns:events="events.*"
applicationComplete="init()">
<fx:Script>
<![CDATA[
import events.EnableChangeEvent;
public function init():void
{
label1.text = "Application Complete!";
}// end function
private function onTestButtonEnableChanged(e:EnableChangeEvent):void
{
label2.text = "Enabled = " + e.isEnabled;
}// end function
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout horizontalAlign="center" paddingTop="50" />
</s:layout>
<components:TestButton id="testButton" label="CLICK!" enableChanged="onTestButtonEnableChanged(event)" />
<s:Label id="label1"/>
<s:Label id="label2"/>
</s:WindowedApplication>
TestButton.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
click="onClick()">
<fx:Metadata>
[Event(name="enableChanged", type="events.EnableChangeEvent")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import events.EnableChangeEvent
private var isEnabled:Boolean;
private function onClick():void
{
isEnabled = !isEnabled;
dispatchEvent(new EnableChangeEvent(EnableChangeEvent.ENABLE_CHANGED, isEnabled));
}// end function
]]>
</fx:Script>
</s:Button>
Основное различие между приложениями состоит в том, что объект Button
, в данном случае объект TestButton
, отправляет EnableChangeEvent
событие при нажатии.При отправке события мы можем проанализировать логическое значение для свойства _isEnabled
из TestButton
для события.До этого значение инвертируется с помощью строки isEnabled = !isEnabled
.Теперь мы можем использовать обработку события, используя объявление mxml объекта TestButton
с атрибутом xml enableChanged
.
Также вместо того, чтобы следовать учебным пособиям, вы можете попробовать книгу, подобную той, которую я читаю.Она называется «Adobe Flash Builder 4 и Flex 4 Bible» Дэвида Гасснера, которую вы можете получить в виде книги в мягкой обложке или книги для своего разжигания.