1.array作为控件使用

FLEX3写法:

<mx:Array id="barname">

<mx:String>Flash</mx:String>

<mx:String>Director</mx:String>

<mx:String>Dreamweaver</mx:String>

<mx:String>ColdFusion</mx:String>

</mx:Array>

FLEX4写法:

<fx:Array id="barname">

<fx:String>Flex</fx:String>

<fx:String>Flash</fx:String>

<fx:String>Dreamweaver</fx:String>

</fx:Array>

举例

<mx:LinkBar  id="navigationBar" dataProvider="{barname}"/>

<mx:LinkBar  id="navigationBar" dataProvider="barname"/>

注:写{},则当barname数据的值修改后,linkbar的数据同步更新

2.array在程序中使用

[Bindable]

public var barname:Array=["Flex","Flash","Dreamweaver"];

<mx:LinkBar  id="navigationBar" dataProvider="{barname}"/>

var barname:Array = new Array();

barname.push("Flex");

barname.push("Flash");

barname.push("Dreamweaver");

navigationBar.dataProvider = barname;

3.array的排序

private var temp:Array = new Array(1,4,3,45,4,6,7,77,9);

function sortArray(numbers:Array):Array{

numbers.sort(Array.NUMERIC);

return numbers;

}

4.ArrayCollection特点

ArrayCollection是flex中的数组集合类,它是很常用的,我们使用它时需要注意几个地方

(1)事件监听

ArrayCollection可以为它注册一个集合改变的监听事件(CollectionEvent.COLLECTION_CHANGE),就是一旦 ArrayCollection数组改变就会触发Event,不是所有情况的改变都会触发改变事件,如果集合当中的对象属性没有被绑定,那么你改变它的对象值也是不会触发事件的,在这种情况下你也许可能需要去将对象的属性进行绑定或者通过itemUpdated方法去管理对象值改变,除非集合的长度改变 了,事件才会被触发

(2)对象删除

ArrayCollection的对象删除方法removeAll(),有这样一种情况,当你在过滤集合数据的时候,它并不会删除所有数据,而是删除全部过滤的数据,不符合过滤条件的数据就没被删除,依然还在source中。

(3)过滤函数

ArrayCollection有个filterFunction过滤函数,就是可能集合中你只需要显示其中某几个对象,你将会需要根据对象条件筛选对 象,那么你可能会用过滤函数,过滤函数会将不符合条件的对象过滤出来,但是ArrayCollection有个source属性是不会变的,它是个数组, 所有源数据全在里面,尽管你去过滤,所有对象都会一直存在其中

(4)排序

ArrayCollection还有一个sort属性是用来排序的,你可以为其指定排序字段

5.ArrayCollection在程序中使用

(1)插入或删除

import mx.collections.ArrayCollection;

private var coll:ArrayCollection;

coll = new ArrayCollection(

[{name:"Martin Foo", age:25},

{name:"Joe Bar", age:15},

{name:"John Baz", age:23}]);

}

要插入元素,可使用addItemAt和addItem:

coll.addItemAt({name:"James Fez", age:40}, 0);

coll.addItem({name:"James Fez", age:40});

(2)搜索

Sort 对象提供findItem 方法用于搜索这个ArrayCollection 中的所有元素。

方法原型如下:

public function findItem(items:Array, values:Object, mode:String,

returnInsertionIndex:Boolean = false, compareFunction:Function = null):int

Value 参数可以是包含属性和所需值的任何对象。

Mode 字符串可以是Sort.ANY_INDEX_MODE,表示返回任何匹配项索引,Sort.FIRST_INDEX_MODE 表示返回第一个匹配项索引,Sort.LAST_INDEX_MODE 表示返回最后一个匹配项索引。

returnInsertionIndex 参数表示如果该方法找不到由values 参数标识的项目,并且此参数为

true,则findItem() 方法将返回这些值的插入点,也就是排序顺序中应插入此项目的。

compareFunction 设置用于查找该项目的比较运算符函数.

举例

private function checkExistence():int {

var sort:Sort = new Sort();

return sort.findItem(coll.source,{name:nameTI.text, age:Number(ageTI.text)}, Sort.ANY_INDEX_MODE);

}

(3)过滤

filterFunction 属性是由ListCollectionView 类定义,它是ArrayCollection 的父类。

当过滤器函数被传递给继承自ListCollectionView 的任何子类后,这里为ArrayCollection 对象,应用过滤器后必须调用refresh 方法

将原型为function(item:Object):Boolean 的函数传递给ArrayCollection 的filter 属性。如果返回true 表示值继续留在ArrayCollection,返回false 表示其值被移除。

举例:

private function init():void {

coll = new ArrayCollection([{name:"Martin Foo", age:25},{name:"Joe Bar", age:15},name:"John Baz", age:23},{name:"Matt Baz", age:21}]);

coll.filterFunction = filterFunc;

coll.refresh();

for(var i:int = 0; i<coll.length; i++) {

trace(coll.getItemAt(i).name);

}

}

private function filterFunc(value:Object):Object {

if(Number(value.age) > 21) {

return true;

}

return false;

}

(4)排序

首先要创建一个Sort,传递一个SortField 对象数组给fields 属性。这些SortField 对象包含的字符串正是每个ArrayCollection 元素将要用来排序的属性。如要对每个对象的age 属性进行排序,创建Sort 对象,传递SortField。

设置排序字段为age:

private function getOldest():void {

var sort:Sort = new Sort();

sort.fields = [new SortField("age")];

coll.sort = sort;

coll.refresh();

trace(coll.getItemAt(0).age+" "+coll.getItemAt(0).name);

}

先按name升序排序,再按age降序排序

sort.fields = [new SortField("age"),new SortField("age",true,true)];

API说明:

public function SortField(

name:String = null,

caseInsensitive:Boolean = false,

descending:Boolean = false,

numeric:Object = null)

参数

name:String (default = null) —此字段用来进行比较的属性的名称。如果该对象为简单类型,则传递 null。

caseInsensitive:Boolean (default = false) —在对字符串进行排序时,指示比较运算符是否忽略值的大小写。

descending:Boolean (default = false) —指示比较运算符是否按降序排列项目。

numeric:Object (default = null) —指示比较运算符是否按编号而不按字母顺序比较排序项目。

6.Array和ArrayCollection的比较

Array的优点:

1)Array的性能优于ArrayCollection,从测试结果平均看来,ArrayCollection的效率是随着object的数目呈线性下 降的,而Array则是体现了优异的效率,在object增加的情况下,基本上没有太大的变化。所以如果在你需要遍历所有元素的情况下(比如说物理引 擎,3D引擎等),Array是不错的选择

程序见附件1.

2)后台JavaBean也用的是数组[]

3)for循环数组似乎比for each  ArrayConllection看起来更“傻瓜化”

4)给Array数组扩展长度,也可以变通实现,而且代价并不大

ArrayCollection的优点:

1)ArrayCollection 实现接口ICollectionView,在 Flex 的类定义内属于[数据集],他提供更强大的检索、过滤、排序、分类、更新监控等功能。类似的类还有 XMLListCollection

2)用 array 在作为 dataProvider 绑定于 control 之上,就无法获得控件的更新(实际上效果是可以得到更新的), 除非控件被重新绘制或者 data provider 被重新指定,而 Collection 则是将 array 的副本存储于 Collection 类的某个对象之中,其特点是 Collection 类本身就具备了确保数据同步的方法,例子如下(取自 adobe 内部工程师 training 示例,稍有改变)

3)对ArrayCollection中的对象进行增加删除更新操作时ArrayCollection会产生事件,可以通过collectionchange事件监听,所以在图表开发中都用ArrayCollection做数据源,一旦有更新,就会反映在图标上

Flex Array 与 ArrayCollection.转自网络的更多相关文章

  1. Flex——Array,ArrayCollection,Vector性能比较(转)

    测试方法 private function Test():void { ;j<;j++) { trace("插入10000项============"); var t1:in ...

  2. Flex Array内置排序方法的使用

    在Array类中,提供内置的排序方法.排序是在软件开发的过程中,经常遇到的问题.通过这些内置的方法,可以快速轻便的进行排序操作. Array类提供sort方法对Array实例进行排序.sort方法没有 ...

  3. Array和ArrayCollection作为数据源的一个应用区别

    在不用[Enabled]元标签的前提下,将一个Array赋值给DataGrid.DataList等控件的DataProvider后,当Array值发生改变时,控件显示内容不会及时更新(可调用控件的in ...

  4. [Flex] PopUpButton系列 —— 打开和关闭弹出菜单

    <?xml version="1.0" encoding="utf-8"?><!--响应打开和关闭弹出菜单的例子 PopUpButtonOpe ...

  5. Flex对象的Clone & Copy浅析

    在flex中有时候会用到ObjectUtil.clone和ObjectUtil.copy方法.下面是官方API的注释. 克隆指定对象,并返回对该克隆的引用.该克隆使用本机序列化技术生成.这意味着在克隆 ...

  6. Flex应用一览表

    1.Flex控件之repeater和radioButton控件应用 2.Flex之DataGrid和Tree控件的数据源XML格式  3.Flex控件之combobox应用 4.转:Flex的Arra ...

  7. Flex性能调优相关的一些总结

    1.Performace包含4点:(1)Latency反应时间(2)Scalability:可伸缩性(3)Reliablity:稳定性(4)Availability:可用性2.运行时生命周期:Flex ...

  8. flex Datagrid checkbox

    <?xml version="1.0" encoding="utf-8"?><!-- http://blog.flexexamples.com ...

  9. flex与后台及页面间对象的传递

    1.从flex中发送请求后,利用<s:RemoteObject/>启用回调方法,类似于jQuery的post函数: <fx:Declarations>        <s ...

随机推荐

  1. [读书笔记]C#学习笔记六: C#3.0Lambda表达式及Linq解析

    前言 最早使用到Lambda表达式是因为一个需求:如果一个数组是:int[] s = new int[]{1,3,5,9,14,16,22};例如只想要这个数组中小于15的元素然后重新组装成一个数组或 ...

  2. APU平台DirectX 12性能测试:超级大惊喜!

    APU平台DirectX 12性能测试:超级大惊喜! 转自:http://www.ithome.com/html/digi/129840.htm [size=1pc]微软将会在接下来的GDC 2015 ...

  3. atitit.提升软件开发效率大的总结O5

    atitit.提升软件开发效率大的总结O5 #---平台化.组件化 1 #--cbb公用模块的建设 1 #---内部最佳流程方法跟实践的总结 2 #---内部知识体系的建设 2 #---问题Qa库的建 ...

  4. 从range和xrange的性能对比到yield关键字(上)

    使用xrange   当我们获取某个数量的循环时,我们惯用的手法是for循环和range函数,例如: for i in range(10): print i 这里range(10)生成了一个长度为10 ...

  5. 使用 multiprocessing.dummy 执行多线程任务

    # -*- coding: utf-8 -*- # from multiprocessing import Pool 多进程 from multiprocessing.dummy import Poo ...

  6. Mars的自语重出江湖,祝大家端午节安康

    上一篇博客似乎已是非常久远的回忆了,不再码字也已经很多年.<三国演义>里,刘备投靠曹操的那段时间里,2个兄弟问刘备未来,刘备说: 屈身守分,以待天时,不可与命争也. 这样一个时代,每个老百 ...

  7. GTD时间管理(2)---管理收集箱

    通过上面一篇文章,相信大家对GTD收集有了原理大致的了解,如果大家对收集不是很了解,可以去看一下. 当我们收集到很多想法和事情之后,在晚会的时候必须要清空收集箱,否则收集箱会堆积如山,最终收集箱成了垃 ...

  8. pip 安装psycopg的错误

    psycopg包安装有点问题,特别是在windows下,pip从requirements.txt批量安装总是出错,发现是这个包的问题. 这里需要用easy_install来装,因为gfw的问题,最好下 ...

  9. 【linux】文件隐藏属性

        这些隐藏的属性确实对于系统有很大的帮助的- 尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr指令只能在Ext2/Ext3的文件系统上面生效, 其他 ...

  10. Android Audio控制和MediaButton远程控制(音视频控制配合)

    使用过Android系统的朋友应该都知道,Android里面声音是区分好几种情况,每种情况下的音频大小是独立的.也就是说你调节了电话铃声大小不会影响多媒体播放的声音大小.这个涉及了AudioStrea ...