在Flex中,Collection类实现了IList接口,这个接口提供一些方法(adding,removing,updating)来修改集合中的元素。可以使用IList接口的方法和属性在ArrayCollection类, XMLList类,和标准Flex控件的dataProvider 属性上。可以使用IList的addItem(), removeItem(), 和setItemAt() 方法分别增加,删除和更新元素数据。addItemAt() and removeItemAt() methods, 和the setItemAt()方法提供第二个参数,下标位置,来指定要在集合中影响的位置。IList接口的length属性返回集合中元素的数量。
Flex的集合机制也包括描述数据改变的事件。实现了IList 或者 ICollectionView 接口的类,无论何时数据发生改变,都分发CollectionEvent类事件所有集合时间都包含类型属性值CollectionEvent.COLLECTION_CHANGE。
CollectionEvent对象有kind属性标志着集合被改变的方式。通过kind属性与CollectionEventKind的常量的对比,你可以测试集合所发生的改变。主要的常量包括ADD,REMOVE和 UPDATE。
CollectionEvent对象包含一个items属性这个属性是一个对象的数组,这个数组的类型依赖于对象分发的事件的类型。对于ADD和REMOVE时间,这个数组包含added和removed数组。对于UPDATE事件,这个items属性包含PropertyChangeEvent事件对象数组。这些对象的属性显示出改变的类型和属性改变之前和之后的值。例如,PropertyChangeEvent类的kind属性显示出属性被改变的方式;你可以测试改变的类型通过把kind属性与PropertyChangeEventKind的常量UPDATE或DELETE.
下边的例子监听DataGrid的改变事件,来创建一个概览——详细关系。在这个关系中,选择一个DataGrid中的一行后,数据会显示在几个form控件中,然后你就可以编辑数据了。(使用概览——详细关系可以使DataGrid控件具有可编辑功能)。通过IList接口的addItem(), removeItem(), and setItemAt()方法,可以对DataGrid中的数据增加,删除,修改。这个例子也监听ArrayCollection上的collectionChange时间保持对数据增删改的日志记录。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.events.*;
import mx.collections.*;
public function collectionEventHandler(event:CollectionEvent):void
{
switch(event.kind)
{
case CollectionEventKind.ADD:
addLog("item"+event.location +"ADD");
break;
case CollectionEventKind.REMOVE:
addLog("item"+event.location +"REMOVE");
break;
case CollectionEventKind.UPDATE:
addLog("item"+event.location +"UPDATE");
break;
case CollectionEventKind.REPLACE:
addLog("item"+event.location +"REPLACE");
break;
}
}
public function addLog(str:String):void
{
log.text += str + "\n";
}
public function addPerson():void
{
ac.addItem({first:firstInput.text,
last:lastInput.text,
email:emailInput.text});
clearInputs();
}
public function removePerson():void {
if(dg.selectedIndex >= 0){
ac.removeItemAt(dg.selectedIndex);
}
}
public function updatePerson():void {
if(dg.selectedItem !== null)
{
ac.setItemAt({first:firstInput.text, last:lastInput.text,
email:emailInput.text}, dg.selectedIndex);
}
}
public function dgChangeHandler():void
{
clearInputs();
firstInput.text = dg.selectedItem.first;
lastInput.text = dg.selectedItem.last;
emailInput.text = dg.selectedItem.email;
}
public function clearInputs():void
{
firstInput.text = "";
lastInput.text = "";
emailInput.text = "";
}
]]>
</mx:Script>
<mx:ArrayCollection id="ac"
collectionChange="collectionEventHandler(event)">
<mx:source>
<mx:Object first="Matt" last="Matthews" email="matt@myco.com"/>
<mx:Object first="Sue" last="Sanderson" email="sue@myco.com"/>
<mx:Object first="Harry" last="Harrison" email="harry@myco.com"/>
</mx:source>
</mx:ArrayCollection>
<mx:Panel title="Master-Detail View" width="100%">
<mx:DataGrid width="100%" id="dg" dataProvider="{ac}"
change="dgChangeHandler()">
<mx:columns>
<mx:DataGridColumn dataField="first" headerText="First Name"/>
<mx:DataGridColumn dataField="last" headerText="Last Name"/>
<mx:DataGridColumn dataField="email" headerText="Email"/>
</mx:columns>
</mx:DataGrid>
<mx:Form label="test" width="100%">
<mx:FormItem label="First Name" width="100%">
<mx:TextInput id="firstInput" width="100%"/>
</mx:FormItem>
<mx:FormItem label="Last Name" width="100%">
<mx:TextInput id="lastInput" width="100%"/>
</mx:FormItem>
<mx:FormItem label="Email" width="100%">
<mx:TextInput id="emailInput" width="100%"/>
</mx:FormItem>
</mx:Form>
<mx:ControlBar horizontalAlign="center">
<mx:Button label="Add New" click="addPerson()"/>
<mx:Button label="Update Selected" click="updatePerson()"/>
<mx:Button label="Remove Selected" click="removePerson()"/>
<mx:Button label="Clear" click="clearInputs()"/>
</mx:ControlBar>
</mx:Panel>
<mx:Panel title="Change log" width="100%" height="125" y="333">
<mx:TextArea id="log" width="100%" height="100%"/>
</mx:Panel>
</mx:Application>
分享到:
相关推荐
android 外部类作为事件监听器类 ,外部类形式的事件监听器不能自由访问创建GUI界面
学会使用监听域对象的属性变更 2、 实验环境 Eclipse 3、 实验内容 (1)创建测试页面,在chapter08项目的WebContext根目录中,编写一个testattribute.jsp页面,以观察各个域对象属性事件监听器的作用。 (2)在...
本次工程的目标是学习监听器,掌握监听三个对象的创建和销毁方法。 三个对象:rquest,session,ServletContext 实现的接口:ServletRequestListener,HttpSessionListener,ServletContextListener 工程的大致步骤...
定义一个按钮bn,并通过创建匿名内部类实现事件监听bn是否被按下。
谷歌插件学习如何监听网站的异步请求
Android 匿名内部类作为事件监听类
android中Editext监听工具类,使用场景:页面内有多个Editext,在页面底部有一个提交或者保存的按钮,需要根据所有的Editext的状态去显示颜色.
易语言源码易语言监听类的复制源码.rar 易语言源码易语言监听类的复制源码.rar 易语言源码易语言监听类的复制源码.rar 易语言源码易语言监听类的复制源码.rar 易语言源码易语言监听类的复制源码.rar 易语言源码...
vue深度学习之对象和数组的监听原理 深度学习原理.pdf
Register()方法可以注册一个监听wifi状态的广播接受者,需要用户传入一个实现抽象类的对象实现回调方法,包括监听Wifi打开和关闭,是否通过wifi连接到网络,是否连接到网络等;广播接受者接收到相应的wifi以及网络...
elasticsearch 在Centos上,修改elasticsearch监听端口 从0.0.0.0 为127.0.0.1,提供文档说明
VS.NET C#监听txt文件修改,上传设备操作日志数据到软件查询系统
Register()方法可以注册一个监听wifi状态的广播接受者,需要用户传入一个实现抽象类的对象实现回调方法,包括监听Wifi打开和关闭,是否通过wifi连接到网络,是否连接到网络等;广播接受者接收到相应的wifi以及网络...
易语言监听类的复制源码,监听类的复制,子程序1,复制回调,初始化_复制监听,复制监听,复制监听对象_QueryInterface,复制监听对象_AddRef,复制监听对象_Release,asm_整数加法,asm_写整型内存,取变量地址_对象,取变量...
swift 监听属性变化,用于对swift基础了解,对代码结构有严谨
当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我们的目的是,在这个人吃之前要提醒他洗手,所以我们要...
JAVA局域网监听软件的设计与开发(源代码+WORD论文) 摘 要 网络监听软件是提供给网络安全管理人员进行安全管理的工具,可以用来监视网络的状态、数据流动情况以及网络上传输的信息,以获取有用信息。作为黑客来说,...
1.vue中监听对象数据属性值的改变,可以使用深度监听 data () { return { form: { status: '', cpufrequency: '', systemstacksize: '', scalabilityclass: '' } } }, watch: { form: { // 深度监听 ...
监听整个对象,使用watch就行 export default { data() { return { a: { b: 1, c: 2 } } }, watch() { a: { handler(newVal, oldVal) { console.log('监听a整个对象的变化'); }, deep: true } } } ...
集成调试平台,支持类结构/jar结构预览、支持方法调试和监听、支持修改类字段(变量、常量、枚举)等。前端功能包括:文章列表、文章类别、站长/博主信息、最新/最热文章、分页、友情链接、文章详情等。后台功能包括:...