我想从Flex中的另一个MSML组件加载MSML组件。更具体地说,我有一个Login MSML组件,它从我的主应用程序文件和Overview MSML组件加载。当用户点击该Login组件中的某个按钮时,它应该重定向到加载Overview MSML组件而不是Login组件。
答案 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)
或者您可以使用addChild
和removeChild
在需要时显示和隐藏组件。或者甚至将所有这些作为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>
希望这有帮助!