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. Atitit.java eval功能的实现  Compiler API

    Atitit.java eval功能的实现  Compiler API 输出echo2 输出目录配置2 针对编译器,JDK 设计了两个接口,分别是 JavaCompiler 和JavaCompiler ...

  2. paip.hibernate save 失败的解决

    paip.hibernate save 失败的解决   打开log  debug  level,,看不见insert 代码...     Hibernate select max(ID).txt   ...

  3. java利用16进制来辨别png格式的图片

    很多人知道利用.png的字符串结尾可以判断前端传入的图片是否为png格式,但是这只是潜意识的判断!那么如何利用png读写的特殊内容来深意识地判断图片格式呢?最近在做东西的时候遇到了点问题,在加载图片的 ...

  4. React Ajax

    React 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取, 当从服务端获取数据库可以将数据存储在 state 中,再用 this.setState 方法重新渲染 ...

  5. Alcatraz的安装和使用

    一.简单说明 Alcatraz 是一款 Xcode的插件管理工具,可以用来管理XCode的 插件.模版以及颜色配置的工具. 二.如何安装 1.github地址:https://github.com/a ...

  6. android: 使用通知

    8.1   使用通知 通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向 用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发 ...

  7. android: PendingIntent的使用

    PendingIntent的Flags的类型: * Flags的类型: FLAG_ONE_SHOT:得到的pi只能使用一次,第二次使用该pi时报错 FLAG_NO_CREATE: 当pi不存在时,不创 ...

  8. Android屏幕适配的一些常识

    屏幕适配的注意事项 1. AndroidManifest.xml设置 在中Menifest中添加子元素 android:anyDensity="true"时,应用程序安装在不同密度 ...

  9. MySQL vs. MongoDB: Choosing a Data Management Solution

    原文地址:http://www.javacodegeeks.com/2015/07/mysql-vs-mongodb.html 1. Introduction It would be fair to ...

  10. Scala 基础入门【翻译】

    原文地址 本文只是带你进入 Scala 的世界,包括安装.不可变量 val.可变量 var.定义类.集合(包括列表(list).集(set).映射(map))以及集合遍历和集合库(能达到并行/并发效果 ...