学习笔记,欢迎拍砖。
XML和XMLList有何区别?
XML不允许相同的层次出现同样的tag。而XMLList可以。如:
var xml:XML = new XML("<Student></Student><Student></Student>");
上边的写法对XML来说是不允许的,而XMLList却支持。
var list:XMLList = new XMLList("<Student></Student><Student></Student>");
如何判断XML对象是否拥有某个属性?
if ("@attr" in node) { ... }
参考链接:
http://martijnvanbeek.net/weblog/40/testing_the_existance_of_an_attribute_in_xml_with_as3.html
如何读取XML文件?
MXML:
<fx:XML id="textContent" source="assets/markup.xml"/>
AS:
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, handleConfigFileLoadComplete);
loader.load(new URLRequest("assets/Config.xml"));
private function handleConfigFileLoadComplete(event:Event):void
{
m_bannerRotators = XML(event.target.data);
var filterList:XMLListCollection
= new XMLListCollection(m_bannerRotators.BannerRotator.(@name == this.name).elements().@name);
}
AS中的E4X支持“与”和“或”这些逻辑操作符吗?
支持
示例代码如下:
var filterResult:XMLListCollection
= new XMLListCollection(config.BannerRotator.(@name == "gamePS3" || @name == "gameWII").Filter.(@name == "all").elements());
Flex的Collections的介绍
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7b6b.html
ArrayList和ArrayCollection有何区别?
ArrayList不能筛选和过滤数组,而ArrayCollection可以。
如何为XMLListCollection排序?
示例代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.SortField;
import mx.collections.Sort;
private function sortByField(value:String,
isNumeric:Boolean = false,
isDescending:Boolean = false):Boolean {
var sortField:SortField = new SortField(value);
sortField.numeric = isNumeric;
sortField.descending = isDescending;
var sort:Sort = new Sort();
sort.fields = [sortField];
xmlListColl.sort = sort;
return xmlListColl.refresh();
}
]]>
</mx:Script>
<mx:XMLListCollection id="xmlListColl">
<mx:source>
<mx:XMLList>
<group name="Esthetique" value="2997" cost="0.52" />
<group name="xx" value="652" cost="0.47" />
<group name="xyt" value="652" cost="0.54" />
<group name="sss" value="652" cost="0.23" />
<group name="ffsdfsd" value="652" cost="0.82" />
</mx:XMLList>
</mx:source>
<mx:sort>
<mx:Sort>
<mx:SortField name="@cost"
numeric="true"
descending="true" />
</mx:Sort>
</mx:sort>
</mx:XMLListCollection>
<mx:Panel>
<mx:DataGrid dataProvider="{xmlListColl}" width="100%">
<mx:columns>
<mx:DataGridColumn dataField="@name" />
<mx:DataGridColumn dataField="@cost" />
<mx:DataGridColumn dataField="@value" />
</mx:columns>
</mx:DataGrid>
<mx:ControlBar>
<mx:Button label="Sort by @name"
click="sortByField('@name')" />
<mx:Button label="Sort by @cost"
click="sortByField('@cost', true, true);" />
<mx:Button label="Sort by @value"
click="sortByField('@value', true, true);" />
</mx:ControlBar>
</mx:Panel>
</mx:Application>
参考链接:
http://blog.flexexamples.com/2007/08/05/sorting-an-arraycollection-using-the-sortfield-and-sort-classes/
Array和Vector.<>有何区别?
1.Vector的性能更高。
2.Vector是type safety的。
3.Vector需要FP10,而有20%的用户仍在使用FP9。
参考链接:
http://stackoverflow.com/questions/1130309/vector-vs-array
除数据类型限制之外,Vector 类还具有其他一些限制,从而有别于 Array 类:
* Vector 是一种密集数组。与 Array 不同,Vector 必须在每个索引中包含一个值(或 null),而前者可以只在索引 0 和 7 中包含值(即使位置 1 到 6 中不存在任何值)。
* Vector 可以具有固定长度,这意味着其所包含的元素数量不可更改。
* 对 Vector 的元素的访问需要接受范围检查。绝对不能从大于最后一个元素 (length - 1) 的索引中读取值。绝对不能对超过当前最后一个索引一个以上的索引设置值(也就是说,只能在现有索引或索引 [length] 中设置值)。
由于 Vector 具有这些限制,因此 Vector 相对于所有元素均为单个类的实例的 Array 实例有三个主要优点:
* 性能:使用 Vector 实例时的数组元素进行访问和迭代的速度比使用 Array 时的速度要快很多。
* 类型安全性:在严格模式下,编译器可以识别数据类型错误。数据类型错误的例子包括将数据类型错误的值分配给 Vector 或从 Vector 中读取值时要求错误的数据类型。但请注意,当使用 push() 方法或 unshift() 方法向 Vector 添加值时,在编译时不会检查参数的数据类型,而是在运行时检查。
* 可靠性:相对于 Array,运行时范围检查(或定长检查)极大地提高了可靠性。
AS里定义XML类型的变量,不需要双引号:
public var dataXML1:XML =
<records>
<record month="Jan" balanceAndheri="10000000.00" />
<record month="Feb" balanceAndheri="56200000.00"/>
<record month="Mar" balanceAndheri="62000000.00" "/>
</records>
如何创建ArrayList的变量实例,并为其赋值?
For MXML:
<s:ArrayList id="mapAC">
<fx:Object label="Jungle" imagePath="assets/Jungle.jpg"/>
<fx:Object label="Swamp" imagePath="assets/Swamp.jpg"/>
</s:ArrayList>
For AS:
var mapAC:ArrayList = new ArrayList([
{label: "Jungle", imagePath="assets/Jungle.jpg"},
{label: "Swamp", imagePath="assets/Swamp.jpg"}
]);
如何从Array里删除一个元素?
使用Array的splice函数,该函数也可以用于插入。
实例代码如下:
var flexArray:Array=[“Adobe”,”Flex”];
flexArray.splice(1,0,”Maromedia”); //删除从索引位置1开始的0个元素,添加”Maromedia”到实例中
trace(flexArray); //输出“Adobe,Macromeida,Flex”
flexArray.splice(1,1); //删除从索引位置1开始的1个元素
trace(flexArray); //输出“Adobe,Flex”
如可清空Dictionary?
private function getFilter(propertyFilter:Dictionary):void
{
for (var obj:Object in propertyFilter)
{
delete propertyFilter[obj];
}
//....
}
如何清空Vector?
调用它的splice函数。需要特别小心的是:别和slice函数混淆了!