使用xml加载flex组件

时间:2009-04-30 12:38:34

标签: xml flex actionscript

如何使用XML加载Flex组件。这个场景很简单,我需要在我的面板中显示三个按钮,但选项true或false是否显示应该是xml。

4 个答案:

答案 0 :(得分:2)

你的问题并不完全清楚,所以我会以两种方式回答:

<强> 1。您需要拥有外部MXML

在这种情况下,您需要使用mxmlc.exe编译XML文件(或者只是将其重命名为.mxml并将其包含在Flex Builder中)并使用SWFLoader组件来访问该文件。我没有很多SWFLoader的经验,所以我会留给你查询。

<强> 2。您需要通过外部XML

设置组件的属性

创建HTTPService,为其分配ID,并使用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从脚本中的任何位置访问最新结果。

希望这有帮助!

答案 1 :(得分:0)

查看appcorelib以获取一些很好的XML操作工具,用于加载静态xml并将xml转换为对象。

答案 2 :(得分:0)

// ActionScript代码

  

import mx.controls.Menu;              import 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信息

        <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>

// component

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

感谢您的帮助Aethex。现在我怎么会加入popupButton中的菜单。

答案 3 :(得分:0)

我不确定你的意思,但是你想在菜单中添加事件监听器吗?

在这种情况下,只需添加:

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”指向menu12中定义的标签字段。就个人而言,我喜欢嵌套我的XML,所以我不知道“@label”应该做什么。如果您将标签嵌套在menu12标记内,则可以使用xmlDP.label。