我正在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:无法访问空对象引用的属性或方法。
希望有人可以帮助我。 感谢名单!
答案 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语句来修复你想要查看的状态。