Компоненты Flex MSML

Я хочу загрузить компонент MSML из другого компонента MSML во Flex. Если быть более точным, у меня есть компонент Login MSML, который загружается из моего основного файла приложения, и компонент Overview MSML. Когда пользователь нажимает на какую-либо кнопку из этого компонента Login, он должен перенаправить на загруженный компонент Overview MSML вместо компонента Login.

12.09.2009 09:55:20
6 ОТВЕТОВ

Два компонента в приложении. Оба 100% ширина / высота. Сделайте одно видимым, а другое невидимым. Повторите по мере необходимости. Это основной принцип работы вкладок и стеков просмотра.

0
12.09.2009 14:36:10

Вы также можете сделать то же самое с государствами. По завершении входа отправьте событие, которое вы прослушиваете, в контейнере приложения. Когда это событие сработает, поменяйте местами состояние, чтобы показать следующий компонент / экран.

0
12.09.2009 14:48:00

Использование состояний работает для меня большую часть времени. Но если вы все же хотите сохранить отдельные файлы mxml по причинам, связанным с разработкой, вы можете загрузить другой компонент mxml с помощью PopupManager.

Ваш основной файл приложения может открыть окно входа в систему, а затем открыть окно обзора - но я не уверен, что это именно то, что вы на самом деле хотите.

В любом случае вот как это сделать:

Сначала импортируйте функцию в ваш логин mxml:

import mx.managers.PopUpManager;

И когда вам нужно вызвать другой файл mxml:

PopUpManager.createPopUp(this, OverviewMXML, false);

В модуле OverviewMXML вы можете сказать ему, чтобы он закончил, добавив в окно заголовка следующее:

close="PopUpManager.removePopUp(this)"

Или звонить, когда пользователь вошел в систему конечно.

0
12.09.2009 15:01:35

Я бы использовал viewstack

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

Это покажет страницу входа по умолчанию. Установите viewstack.selectedIndex = 1;в обработчике нажатия кнопки, чтобы скрыть управление входом в систему и отобразить обзор.

1
14.09.2009 09:48:18

Или вы можете использовать addChildи removeChildдля отображения и скрытия компонентов при необходимости. Или даже включите их все в приложение как теги MXML и используйте visibleсвойство, чтобы показать / скрыть их.

0
22.02.2010 21:04:42

Если вы на самом деле говорите о 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>

Надеюсь это поможет!

0
22.02.2010 21:26:42