Flex 组件和 main.mxml 通信
Posted
技术标签:
【中文标题】Flex 组件和 main.mxml 通信【英文标题】:Flex Components and main.mxml communication 【发布时间】:2012-03-25 02:03:54 【问题描述】:我正在 AIR 中构建一个 Flex 4 应用程序。
我制作了一个 main.mxml 和一个 login.mxml 组件。一切正常,但我无法在我的两个 mxml(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" includeIn="State1">
</components:login>
因此,来自组件 loginInstanceCom 的实例在我使用相同 ID 的窗口应用程序初始化中无法识别。
它给出了以下错误:
TypeError:错误 #1009:无法访问空对象引用的属性或方法。
希望有人可以帮助我。 谢谢!
【问题讨论】:
你不能只使用视图堆栈而不是状态吗?在我看来,国家的弹性太丑了。 【参考方案1】:虽然您没有指定,但我假设 login.mxml 组件是 main.mxml 组件的子组件。
要调度事件,请执行以下操作:
dispatchEvent(new Event('myLoginSuccesful'));
您可能希望向组件添加元数据以使该事件显示在代码提示中,但这不是必需的。
在主应用程序中监听事件:
loginInstance.addEventListener('myLoginSuccesful',onLoginSuccesful);
我可能会将这段代码添加到主组件的初始化处理程序中。
在您的处理程序方法中,只需更改状态:
protected function onLoginSuccesful(event:Event):void
currentState = 'main';
【讨论】:
您好,感谢您的快速答复。我对 Flex 和 Actionscript 很陌生,但我知道你是答案。现在唯一的问题是myLoginInstance 是什么? myLoginInstance = 组件的 ID? (给出错误) myLoginInstance = a public var myLoginInstance:login 其中 login 是自定义组件的名称?因为这也给出了一个错误。如果你有时间请回答。亲切的问候,Gizzy myLoginInstance 将是您的 MyLogin.mxml 组件的 hte 实例的名称。当在 MXML 中创建实例时,这将是 id 标记。在 ActionScript 中创建实例时,该实例将成为变量名。 我的实例是在 MXML 中创建的,就像 MainApplication 中的code
您可以使用 Swiz 框架在要分派数据的方法之前使用元数据标记来分派事件。 然后你可以使用 currentstate 语句来修复你想要查看的状态。
【讨论】:
-1 来自我。 Swiz 框架元数据不分派事件;它只为这些事件添加侦听器。调度所述事件仍由您决定;为了让 Swiz 调用处理程序方法,您必须使用 Swiz Event Dispatcher 调度该事件。 监听器用于以正确的方式执行事件。您可以理解我的意思,因为我多次使用“swiz.dispatchEvent()”。我刚刚试图解决上述问题。以上是关于Flex 组件和 main.mxml 通信的主要内容,如果未能解决你的问题,请参考以下文章
使用 RemoteObject 和多个组件时的 Flex 4 最佳实践
FlashDevelop 看不到我制作的 MXML 组件文件