将actionscript 3中的xml文件中的值读取到组合框中

Posted

技术标签:

【中文标题】将actionscript 3中的xml文件中的值读取到组合框中【英文标题】:reading values from xml file in actionscript 3 into a combobox 【发布时间】:2016-05-16 10:21:50 【问题描述】:

我在 .mxml 文件中的布局是这样的:-

<?xml version="1.0" encoding="utf-8"?>  
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                           xmlns:s="library://ns.adobe.com/flex/spark" 
                           xmlns:mx="library://ns.adobe.com/flex/mx"   >
        <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <mx:HBox  horizontalAlign="right" top="20">
            <mx:ComboBox id="comboBox" fontSize="12"  dataProvider="middleStack"  name="versioncombo"/>
        </mx:HBox>
        <mx:VBox top="50" left="10" >
            <mx:Label text="Builds" fontSize="18">
            </mx:Label>
            </mx:VBox>
        <mx:VBox top="50" horizontalAlign="center" left="200">
            <mx:Label text="Date" fontSize="18">
            </mx:Label>
        </mx:VBox>
        <mx:VBox top="50" horizontalAlign="center" right="10">
            <mx:Label text="Release" fontSize="18">
            </mx:Label>
        </mx:VBox>
        <mx:VBox   styleName="centerLightGreyBg" verticalGap="0">

            <mx:ViewStack id="middleStack"   backgroundAlpha="0" change="changev()">
            </mx:ViewStack>

        </mx:VBox>
        <fx:Style>

现在我想通过从 XML 文件中读取值来向 id = combobox 和 name = versioncombo 的组合框添加值。我的xml是这样的。

<Install>
  <version>
    <number>5.0</number>
    <build>907681</build>
    <path></path>

  </version>
  <version>
    <number>6.2</number>
    <build>1043305</build>
    <path></path>

  </version>
</Install>

我想用版本号填充组合框,即 5.0,6.2。

我尝试点击此链接,但未能成功 http://www.parorrey.com/blog/flash-development/as3-adding-dropdown-combobox-flash-component-using-actionscript-with-xml-data/

AS3 Procedural. Randomise order of Items in Combobox From XMl

我对 AIR 很陌生。

我试过这样:-

import fl.data.DataProvider; 

            var country:String='';
            var countriesList:Array = [];

            //URLLoader class helps you to load data from an external source such as a URL

            var xmlLoader:URLLoader ; 
            var xmlData:XML = new XML(); 

            public function Pathfinding() 
                // constructor code
                xmlLoader = new URLLoader();
                xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
                xmlLoader.load(new URLRequest("grid.xml"));
            

            function LoadXML(e:Event):void  
                xmlData = new XML(e.target.data); 
                xmlData.ignoreWhite = true;

                ParseCountries(xmlData); 
                //trace(xmlData);
             

            function ParseCountries(countriesInput:XML):void  

                var countriesListing:XMLList = countriesInput.country.attributes(); 
                var i:int;  

                for each (var countryName:XML in countriesListing)  

                    //populate the countriesList array to be used with ComboBox
                    countriesList.push( label:countryName, data:countryName );
                    trace(countryName);

                

                versioncombo.prompt = "Select version:"; 
                versioncombo.dataProvider = new DataProvider(countriesList); 
                versioncombo.addEventListener(Event.CHANGE, dropDownHandler);
                versioncombo.dropdown.rowHeight  = 30;
                versioncombo.width = 150;

             


            function dropDownHandler(event:Event):void  

                country = ComboBox(event.target).selectedItem.data;     
                trace("selected country: "+ country);
                //do something here whatever you want 
               
comboBox.prompt = "Select Country:"; 
            comboBox.dataProvider = new DataProvider(countriesList); 
            comboBox.addEventListener(Event.CHANGE, dropDownHandler);
            comboBox.dropdown.rowHeight  = 30;
            comboBox.width = 150;

但收到错误“-1180:调用可能未定义的方法 DataProvider。”

                comboBox.dataProvider = new DataProvider(countriesList); 

不适合我。

【问题讨论】:

versioncombo 是什么?你的意思是comboBox 也许!? 我的组合框的名字 【参考方案1】:

您将name 属性与您定义的ComboBox 组件的id 属性混淆了。它是id,您需要使用它来引用ComboBox 实例。

来自Working with Components:

您应该为每个动态创建的实例声明一个实例变量 组件并在其中存储对新创建组件的引用, 就像 MXML 编译器在您设置 id 属性时所做的那样 组件实例标记。然后您可以访问您动态创建的 组件的方式与在 MXML 中以声明方式创建的组件相同。

【讨论】:

我尝试使用 id 但我收到错误“1172: 定义 fl.data:DataProvider 无法找到”【参考方案2】:

您只需要 read about 正确使用 dataprovider。您不需要创建新的实例,例如“新 DataProvider”。请使用 ArrayCollection 或任何 IList

【讨论】:

以上是关于将actionscript 3中的xml文件中的值读取到组合框中的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 ActionScript 3中的XML循环

ActionScript 3中的XML循环

ActionScript 3 as3中的动态HTML / XML链接

ActionScript 3 AS3处理XML节点名称中的破折号

Actionscript 3 - 如何在删除该事件后保留该事件的值

将外部文件中的值加载到 pom.xml