Flex中利用URLLoader和URLVariables类导入文件的例子
Peter在写这个例子的时候说“Not sure if this is helpful to anybody”,其他人不敢说,不过这个例子刚好是我所需要的–我在做的一个解析ActionScript文件的项目中需要用到这个功能。例子中演示了如何利用URLLoader和URLVariables类,从一个扩展文件中读入一定格式的内容(name/value),根据读入的内容随即显示在DataGrid控件中。
下面是完整代码:
Download: main.mxml<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" verticalAlign="middle" backgroundColor="white" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var VARIABLES_URL:String = "params.txt";
[Bindable]
private var arrColl:ArrayCollection;
[Bindable]
private var paramColl:ArrayCollection;
private var urlReq:URLRequest;
private var urlLdr:URLLoader;
private function init():void {
/* Initialize the two ArrayCollections objects with empty arrays. */
arrColl = new ArrayCollection();
paramColl = new ArrayCollection();
/* Initialize the URLRequest object with the URL to the file of name/value pairs. */
urlReq = new URLRequest(VARIABLES_URL);
/* Initialize the URLLoader object, assign the various event listeners, and load the specified URLRequest object. */
urlLdr = new URLLoader();
urlLdr.addEventListener(Event.COMPLETE, doEvent);
urlLdr.addEventListener(Event.OPEN, doEvent);
urlLdr.addEventListener(HTTPStatusEvent.HTTP_STATUS, doEvent);
urlLdr.addEventListener(IOErrorEvent.IO_ERROR, doEvent);
urlLdr.addEventListener(ProgressEvent.PROGRESS, doEvent);
urlLdr.addEventListener(SecurityErrorEvent.SECURITY_ERROR, doEvent);
urlLdr.load(urlReq);
}
private function doEvent(evt:Event):void {
arrColl.addItem({type:evt.type, idx:arrColl.length+1, eventString:evt.toString()});
switch (evt.type) {
case Event.COMPLETE:
/* If the load was successful, create a URLVariables object from the URLLoader.data property and populate the paramColl ArrayCollection object. */
var ldr:URLLoader = evt.currentTarget as URLLoader;
var vars:URLVariables = new URLVariables(ldr.data);
var key:String;
for (key in vars) {
paramColl.addItem({key:key, value:vars[key]});
}
params.visible = true;
break;
}
}
]]>
</mx:Script>
<mx:VBox>
<mx:Label text="Events:" />
<mx:DataGrid id="events" dataProvider="{arrColl}" rowCount="5">
<mx:columns>
<mx:DataGridColumn dataField="idx" headerText="#" width="20" />
<mx:DataGridColumn dataField="type" headerText="Type" showDataTips="true" dataTipField="eventString" />
</mx:columns>
</mx:DataGrid>
</mx:VBox>
<mx:VBox>
<mx:Label text="Parameters:" />
<mx:DataGrid id="params" dataProvider="{paramColl}" rowCount="5" visible="false">
<mx:columns>
<mx:DataGridColumn dataField="key" headerText="Key" />
<mx:DataGridColumn dataField="value" headerText="Value" />
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" verticalAlign="middle" backgroundColor="white" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var VARIABLES_URL:String = "params.txt";
[Bindable]
private var arrColl:ArrayCollection;
[Bindable]
private var paramColl:ArrayCollection;
private var urlReq:URLRequest;
private var urlLdr:URLLoader;
private function init():void {
/* Initialize the two ArrayCollections objects with empty arrays. */
arrColl = new ArrayCollection();
paramColl = new ArrayCollection();
/* Initialize the URLRequest object with the URL to the file of name/value pairs. */
urlReq = new URLRequest(VARIABLES_URL);
/* Initialize the URLLoader object, assign the various event listeners, and load the specified URLRequest object. */
urlLdr = new URLLoader();
urlLdr.addEventListener(Event.COMPLETE, doEvent);
urlLdr.addEventListener(Event.OPEN, doEvent);
urlLdr.addEventListener(HTTPStatusEvent.HTTP_STATUS, doEvent);
urlLdr.addEventListener(IOErrorEvent.IO_ERROR, doEvent);
urlLdr.addEventListener(ProgressEvent.PROGRESS, doEvent);
urlLdr.addEventListener(SecurityErrorEvent.SECURITY_ERROR, doEvent);
urlLdr.load(urlReq);
}
private function doEvent(evt:Event):void {
arrColl.addItem({type:evt.type, idx:arrColl.length+1, eventString:evt.toString()});
switch (evt.type) {
case Event.COMPLETE:
/* If the load was successful, create a URLVariables object from the URLLoader.data property and populate the paramColl ArrayCollection object. */
var ldr:URLLoader = evt.currentTarget as URLLoader;
var vars:URLVariables = new URLVariables(ldr.data);
var key:String;
for (key in vars) {
paramColl.addItem({key:key, value:vars[key]});
}
params.visible = true;
break;
}
}
]]>
</mx:Script>
<mx:VBox>
<mx:Label text="Events:" />
<mx:DataGrid id="events" dataProvider="{arrColl}" rowCount="5">
<mx:columns>
<mx:DataGridColumn dataField="idx" headerText="#" width="20" />
<mx:DataGridColumn dataField="type" headerText="Type" showDataTips="true" dataTipField="eventString" />
</mx:columns>
</mx:DataGrid>
</mx:VBox>
<mx:VBox>
<mx:Label text="Parameters:" />
<mx:DataGrid id="params" dataProvider="{paramColl}" rowCount="5" visible="false">
<mx:columns>
<mx:DataGridColumn dataField="key" headerText="Key" />
<mx:DataGridColumn dataField="value" headerText="Value" />
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:Application>