Flex Components和main.mxml通信

时间:2012-03-07 14:27:00

标签: flex flex4 components

我正在AIR中构建Flex 4应用程序。

我制作了一个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>

因此,在windowedapplication初始化中我无法识别组件loginInstanceCom中的实例,其中我使用相同的id。

它出现以下错误:

TypeError:错误#1009:无法访问空对象引用的属性或方法。

希望有人可以帮助我。 感谢名单!

2 个答案:

答案 0 :(得分:2)

虽然你没有指定,但我假设login.mxml组件是main.mxml组件的子组件。

要发送活动,请执行以下操作:

dispatchEvent(new Event('myLoginSuccesful'));

您可能希望向组件添加元数据,以便在代码提示中显示该事件,但这不是必需的。

在主应用程序中监听事件:

loginInstance.addEventListener('myLoginSuccesful',onLoginSuccesful);

我可能会在主要组件的初始化处理程序中添加此代码。

在处理程序方法中,只需更改状态:

protected function onLoginSuccesful(event:Event):void{
 currentState = 'main';
}

答案 1 :(得分:-1)

您可以使用Swiz框架在要分派数据的方法之前使用元数据标记调度事件。 然后你可以使用currentstate语句来修复你想要查看的状态。