Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex组件和main.mxml通信_Apache Flex_Flex4_Components - Fatal编程技术网

Apache flex Flex组件和main.mxml通信

Apache flex Flex组件和main.mxml通信,apache-flex,flex4,components,Apache Flex,Flex4,Components,我正在空中构建Flex4应用程序 我制作了main.mxml和login.mxml组件。这一切都可以工作,但我无法在我的两个MXML(主MXML和组件MXML)之间通信 登录可以工作,但是它必须向main发送一个事件,我可以更改main中的状态 这是我的裁剪代码 login.mxml //resulthandler if login is succesfull loginUserResult.addEventListener(ResultEvent.RESULT,

我正在空中构建Flex4应用程序

我制作了main.mxml和login.mxml组件。这一切都可以工作,但我无法在我的两个MXML(主MXML和组件MXML)之间通信

登录可以工作,但是它必须向main发送一个事件,我可以更改main中的状态

这是我的裁剪代码

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.";
            }
        } 
    <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>
因此login.mxml成功发送事件

main.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.";
            }
        } 
    <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中的实例在windowedapplication initialize中无法识别,我使用了相同的id

它给出了以下错误:

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

希望有人能帮助我。
塔克斯

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

要分派事件,请执行以下操作:

dispatchEvent(new Event('myLoginSuccesful'));
您可能希望向组件添加元数据,以便在代码提示中显示该事件,但这不是必需的

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

loginInstance.addEventListener('myLoginSuccesful',onLoginSuccesful);
我可能会在主组件的初始化处理程序中添加此代码

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

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

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

您不能只使用视图堆栈而不是状态吗?在我看来,州在flex中是如此丑陋。-我的1。Swiz框架元数据不发送事件;它只为这些事件添加侦听器。这仍然取决于您是否发送所述事件;为了让Swiz调用处理程序方法,您必须使用Swiz事件调度器分派该事件。侦听器用于以正确的方式执行事件。您可以理解我的意思,因为我已经多次使用“swiz.dispatchEvent()”。我刚刚试着解决上述问题。你好,谢谢你的快速回答。我对Flex和Actionscript还不太熟悉,但我明白你的答案。现在唯一的问题是MyLogin实例是什么?myLoginInstance=组件的id?(给出错误)myLoginInstance=公共变量myLoginInstance:login,其中login是自定义组件的名称?因为这也会产生一个错误。如果你有时间,请回答。好意,GizzymyLoginInstance将是MyLogin.mxml组件的实例的名称。在MXML中创建实例时,它将是id标记。在ActionScript中创建实例时,该实例将是变量名。my实例是在MXML中创建的,就像main应用程序中的
code
。它仍然说我不能引用空对象。。。我不明白我做错了什么。请帮帮我,因为它越来越让人沮丧了。出于好意,GizzyI修改了答案中的代码,以指定您的显式实例名称。基本上是“loginInstance.addEventListener('MyLoginSuccessful',OnLoginSuccessful);”,如果这没有帮助;你应该编辑你的问题,发布一个更扩展的代码段。我想我被误解了,我的组件只是在我的mxml代码中“声明”的,像这样->并且它不识别id?我真的不明白。。。