загрузка компонентов Flex с использованием XML - PullRequest
1 голос
/ 30 апреля 2009

Как загрузить компоненты flex, используя XML. Сценарий простой, как этот, мне нужно, чтобы на моей панели появилось три кнопки, но параметр true или false, отображаться ли, должен быть в xml.

Ответы [ 4 ]

2 голосов
/ 02 мая 2009

Вы не совсем ясно в своем вопросе, поэтому я отвечу двумя способами:

1. Вам нужен внешний MXML

В этом случае вам необходимо скомпилировать файл XML с помощью mxmlc.exe (или просто переименовать его в .mxml и включить в Flex Builder) и использовать компонент SWFLoader для доступа к файлу. У меня нет большого опыта работы с SWFLoader, поэтому я оставлю это на ваше усмотрение.

2. Вам нужно установить свойства компонентов через внешний XML

Создайте HTTPService, назначьте ему идентификатор и используйте свойство url, чтобы указать его в вашем XML-файле. Не назначайте формат результата. Затем используйте событие результата и укажите на функцию, которая будет выполняться, когда ваш XML будет загружен. Это должно выглядеть так:

<mx:HTTPService id="service" url="myXml.xml" result="Foo (event)" />

Допустим, myXml выглядит следующим образом:

<properties>
    <button1Enabled>false</button1Enabled>
    <button2Visible>true</button2Visible>
    <button3Text>"TEXT"</button3Text>
</properties>

Вот как должна выглядеть ваша функция Foo. Он будет выполнен, когда HTTPServices завершит загрузку myXml.xml.

private function Foo (e : ResultEvent) : void {
    myButton.enabled = e.result.properties.button1Enabled; // false
    myOtherButton.visible = e.result.properties.button2Visible; // true
    myLastButton.label = e.result.button3Text; // "TEXT"
}

Эта функция получает результат обслуживания и присваивает различным кнопкам некоторые свойства, определенные в XML. Кроме того, вы также можете использовать service.lastResult для доступа к самому последнему результату из любого места в скрипте.

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

0 голосов
/ 07 мая 2009

Я не уверен, что вы имеете в виду, но вы хотите добавить слушателей событий в меню?

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

menu12.addEventListener (event, eventHandlerFunction);

Пример:

menu12.addEventListener (MouseEvent.CLICK, menu12Clicked);

Flex автоматически передает событие в функцию menu12Clicked в качестве аргумента. Если вы хотите иметь несколько аргументов, вы должны использовать:

menu12.addEventListener (MouseEvent.CLICK, function (e : MouseEvent) : void {
    menu12Clicked (e, "argument");
});

У меня нет опыта работы с PopUpButtons, но то, что есть в вашем коде , должно работать , хотя я предполагаю, что xmlDP указывает на тег menu12. Я также предполагаю, что "@label" указывает на поле метки, определенное в меню12. Лично мне нравится вкладывать свой XML, поэтому я не знаю, что должен делать «@label». Если бы у вас была метка, вложенная в тег menu12, вы бы использовали xmlDP.label.

0 голосов
/ 05 мая 2009

// код ActionScript

import mx.controls.Menu; импорт flash.events.MouseEvent;

        private var menu12:Menu;

        private function init():void {
            menu12 = new Menu();
            menu12.labelField = "@label";
            menu12.dataProvider = xmlDP;
            menu12.showRoot = false;
            menu12.width = popUpButton.width;
            popUpButton.popUp = menu12;
        }

// XML Info

        <menu1 label="Some introduction" />
        <menu2 label="Disabled State (disabled)." enabled="false" />
        <sep1 type="separator" />
        <menu3 label="parent">
            <menu4 label="child1" />
        </menu3>
        <menu5 label="parent (disabled)" enabled="false">
            <menu6 label="child1" />
            <menu7 label="child2" />
            <menu8 label="child3" />
        </menu5>
        <menu9 type="separator" />
        <menu10 type="separator" />
        <menu11 id="leftButton" label="Left" type="radio" groupName="radioGroup" toggled="true" enabled="true"  />
        <menu12 id="rightButton" label="Right" type="radio" groupName="radioGroup" enabled="false" />
        <menu13 id="popupButton" label="Popup" type="radio" groupName="radioGroup" enabled="false" />

    </root>

// компонент

<mx:PopUpButton id="popUpButton"
            label="Please select an item"
            openAlways="true"
            creationComplete="init();" />

Спасибо за вашу помощь Aethex. Теперь, как получилось, я бы добавил в меню popupButton.

0 голосов
/ 02 мая 2009

Проверьте appcorelib для некоторых хороших инструментов XML-манипуляции для загрузки статического XML и преобразования XML в объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...