Компоненты Flex MSML - PullRequest
       10

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

1 голос
/ 12 сентября 2009

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

Ответы [ 6 ]

1 голос
/ 14 сентября 2009

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

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

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

0 голосов
/ 23 февраля 2010

Если вы на самом деле говорите о 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 голосов
/ 23 октября 2009

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

0 голосов
/ 12 сентября 2009

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

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

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

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

import mx.managers.PopUpManager;

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

PopUpManager.createPopUp(this, OverviewMXML, false);

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

close="PopUpManager.removePopUp(this)"

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

0 голосов
/ 12 сентября 2009

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

0 голосов
/ 12 сентября 2009

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

...