Flex Components и main.mxml сообщения - PullRequest
0 голосов
/ 07 марта 2012

Я создаю приложение Flex 4 в AIR.

Я создал компонент main.mxml и login.mxml.Это все работает, но я не могу общаться между двумя mxmls (MAIN и COMPONENT)

Логин работает, но затем он должен отправить событие для главного, чтобы я мог изменить состояние в основном.

Вот мой обрезанный код.

login.mxml

//resulthandler if login is succesfull
                loginUserResult.addEventListener(ResultEvent.RESULT, loginUserResultHandler);

        public function loginUserResultHandler(event:ResultEvent):void
        {
            if(loginUserResult.lastResult == 1)
            {
                dispatchEvent(new Event('myLoginSuccesfull'));
                trace("dispatchEvent - myLoginSuccesfull ");
            }
            else
            {
                this.loginErrorLBL.text = "Username and/or password aren't valid.";
            }
        } 

Итак, login.mxml успешно отправляет событие.

main.mxml

    <fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        protected function windowedapplication1_initializeHandler(event:FlexEvent):void
        {
            loginInstanceCom.addEventListener('myLoginSuccesfull', onLoginSuccesful);
        }

        protected function onLoginSuccesful(event:Event):void{
            trace("onLoginSuccesful recived");
            currentState = "main";
        }
    ]]>
</fx:Script>
</fx:Script>
<s:states>
    <s:State name="State1"/>
    <s:State name="main"/>
</s:states>

<components:login id="loginInstanceCom" x="263" y="10" width="239" height="223" includeIn="State1">
</components:login>

Итак, экземпляр из компонента loginInstanceCom не распознается в инициализации приложения windowed, где я использую тот же идентификатор.

Выдает следующую ошибку:

Ошибка типа: Ошибка # 1009: не удается получить доступ к свойству или методу ссылки на нулевой объект.

Надеюсь, кто-то может мне помочь.Thanx!

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Хотя вы не указали, я предполагаю, что компонент login.mxml является дочерним по отношению к компоненту main.mxml.

Чтобы отправить событие, сделайте следующее:

dispatchEvent(new Event('myLoginSuccesful'));

Возможно, вы захотите добавить метаданные в компонент, чтобы это событие отображалось в подсказке кода, но это не обязательно.

Прослушайте событие в вашем основном приложении:

loginInstance.addEventListener('myLoginSuccesful',onLoginSuccesful);

Возможно, я бы добавил этот код в обработчик инициализации основного компонента.

В вашем методе-обработчике просто измените состояние:

protected function onLoginSuccesful(event:Event):void{
 currentState = 'main';
}
0 голосов
/ 07 марта 2012

Вы можете использовать платформу Swiz для отправки событий с помощью тега метаданных перед методом, в который вы хотите отправить данные. и затем вы можете использовать оператор currenttstate, чтобы исправить состояние, которое вы хотите просмотреть.

...