【问题标题】:Flex Components and main.mxml communicationFlex 组件和 main.mxml 通信
【发布时间】: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 成功发送事件。

ma​​in.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 的实例在我使用相同 ID 的窗口应用程序初始化中无法识别。

它给出了以下错误:

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

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

【问题讨论】:

  • 你不能只使用视图堆栈而不是状态吗?在我看来,国家的弹性太丑了。

标签: apache-flex flex4 components


【解决方案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。它仍然说我不能引用一个空对象......我不明白我做错了什么。请帮忙,因为它越来越令人沮丧。亲切的问候,Gizzy
  • 我修改了答案中的代码以指定您的明确实例名称。基本上是“loginInstance.addEventListener('myLoginSuccesful',onLoginSuccesful);”如果这没有帮助;您应该编辑您的问题以发布更广泛的代码段。
  • 我想我被误解了,我的组件只是像这样在我的 mxml 代码中“声明”-> 并且它不识别 id ?我真的不明白...
【解决方案2】:

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

【讨论】:

  • -1 来自我。 Swiz 框架元数据不分派事件;它只为这些事件添加侦听器。调度所述事件仍由您决定;为了让 Swiz 调用处理程序方法,您必须使用 Swiz Event Dispatcher 调度该事件。
  • 监听器用于以正确的方式执行事件。您可以理解我的意思,因为我多次使用“swiz.dispatchEvent()”。我刚刚试图解决上述问题。
猜你喜欢
  • 2011-01-16
  • 2010-11-28
  • 2023-04-02
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
相关资源
最近更新 更多