Flex中的数据类型

学习笔记,欢迎拍砖。

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函数混淆了!

你可能感兴趣的:(xml,Flex,Adobe)