将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 as3中的动态HTML / XML链接
ActionScript 3 AS3处理XML节点名称中的破折号