Flex MSML组件

时间:2009-09-12 09:55:20

标签: flex mxml

我想从Flex中的另一个MSML组件加载MSML组件。更具体地说,我有一个Login MSML组件,它从我的主应用程序文件和Overview MSML组件加载。当用户点击该Login组件中的某个按钮时,它应该重定向到加载Overview MSML组件而不是Login组件。

6 个答案:

答案 0 :(得分:1)

我会使用viewstack

<mx:ViewStack width="100%" height="100%" id="viewstack">
  <local:LoginControl/>
  <local:OverviewControl/>
</mx:ViewStack>

默认显示登录页面。在按钮的单击处理程序中设置viewstack.selectedIndex = 1;以隐藏登录控制和显示概述。

答案 1 :(得分:0)

应用程序中的两个组件。均为100%宽度/高度。使一个可见,另一个不可见。根据需要重复。这是制表符和视图堆栈的基本原理。

答案 2 :(得分:0)

你也可以用状态做同样的事情。登录完成后,在您的应用程序容器中调度您侦听的事件。当该事件触发时,交换状态以显示下一个组件/屏幕。

答案 3 :(得分:0)

使用状态大部分时间都适合我。但是,如果您希望保持mxml文件是单独的,出于开发原因或其他原因,您可以使用PopupManager加载其他mxml组件。

你的主应用程序文件可以弹出登录窗口,然后弹出概览窗口 - 但我不确定这是你真正想要的。

无论如何,这是如何做到的:

首先将该函数导入您的登录名mxml:

import mx.managers.PopUpManager;

当你需要调用另一个mxml文件时:

PopUpManager.createPopUp(this, OverviewMXML, false);

在OverviewMXML模块中,您可以通过向标题窗口添加以下内容来告知它完成:

close="PopUpManager.removePopUp(this)"

或在用户登录时呼叫。

答案 4 :(得分:0)

或者您可以使用addChildremoveChild在需要时显示和隐藏组件。或者甚至将所有这些作为MXML标记包含在应用程序中,并使用visible属性来显示/隐藏它们。

答案 5 :(得分:0)

如果您真的在谈论MXML,就像最初提出的问题一样,那么我建议采用以下方法:

将每个组件构建为Canvas的子类或您想要的任何组件,将这些新类导入应用程序,添加每个组件的实例,并使用visible属性控制显示。

例如:

myApp.mxml在

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="path.to.the.package.that.contains.your.components.*">
    <mx:Script>
<![CDATA[
    public function showOverview():void {
        login.visible = false;
        overview.visible = true;
    }
    ]]>
    </mx:Script>
    <LoginComponent id="login" x="0" y="0" ParentApp="{this}" />
    <OverviewComponent id="overview" x="0" y="0" visible="false" />
</mx:Application>

LoginComponent.mxml

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="path.to.the.package.that.contains.your.components.*">
    <mx:Script>
<![CDATA[
    private var parentApp:MyApp;

    [Bindable]
    public function get ParentApp():MyApp {
        return parentApp;
    }
    public function set ParentApp(val:MyApp):void {
        parentApp = val;
    }

    private function loginBtnClick(et:MouseEvent):void {
        parentApp.showOverview();
    }
    ]]>
    </mx:Script>
    <mxButton id="loginBtn" x="0" y="0" click="loginBtnClick(event)" label="Login..."/>
</mx:Canvas>

希望这有帮助!