`
peijunlin2008
  • 浏览: 171805 次
  • 性别: Icon_minigender_1
  • 来自: 河北省
社区版块
存档分类
最新评论

每天学一点 CollectionEvent对象监听Collection类的修改

    博客分类:
  • Flex
阅读更多
在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 外部类作为事件监听器类

    标题提到的“android 外部类作为事件监听器类”是指将一个非匿名类(外部类)作为事件处理的对象,这在某些情况下可能是必要的,比如当监听器需要持有较复杂的成员变量或者实现多个接口时。然而,描述中提到的一个...

    用java实现监听对象的属性变更

    学会使用监听域对象的属性变更 2、 实验环境 Eclipse 3、 实验内容 (1)创建测试页面,在chapter08项目的WebContext根目录中,编写一个testattribute.jsp页面,以观察各个域对象属性事件监听器的作用。 (2)在...

    监听器:监听三个对象的创建和销毁方法

    本次工程的目标是学习监听器,掌握监听三个对象的创建和销毁方法。 三个对象:rquest,session,ServletContext 实现的接口:ServletRequestListener,HttpSessionListener,ServletContextListener 工程的大致步骤...

    匿名内部类作为事件监听器

    匿名内部类的优势在于它能够直接访问外部类的成员变量和方法,这使得我们可以方便地在监听器的回调方法中访问和修改其他UI元素或应用状态。然而,由于它们的存在是短暂的,只在设置监听器的那一刻实例化,所以不适合...

    Android 匿名内部类作为事件监听类

    在Android开发中,匿名内部类是一种常见的编程技巧,它允许我们快速实现事件监听功能,而无需定义单独的类。本文将深入探讨如何使用匿名内部类作为事件监听类,以及其在Android开发中的应用。 首先,我们需要理解...

    解决Vue2.0 watch对象属性变化监听不到的问题

    很早之前就遇到一个问题,父组件向子组件传值,子组件监听传入对象的某个属性。发现子组件使用deep watch都不能观察到对象中属性的变化,今天终于找到为啥出现这种问题和解决办法了。 解决 为啥出现这种问题?受 ES5...

    vue深度学习之对象和数组的监听原理 深度学习原理.pdf

    在Vue中,对于对象和数组的监听是实现响应式系统的关键部分。这篇文章深入探讨了Vue如何监听对象和数组的变化,以便在数据发生变化时自动更新视图。 ### 对象的监听 Vue.js 使用 `defineReactive` 函数来实现对象...

    JS 对象与数组的监听实例

    **JS对象与数组的监听实例** 在JavaScript中,对象和数组是两种非常基础且重要的数据结构。它们在处理复杂的数据时扮演着至关重要的角色。在前端开发中,尤其是在MVVM(Model-View-ViewModel)模式下,对这些数据...

    VS.NET C#监听txt日志修改

    这是.NET Framework提供的一个强大工具,可以监听指定目录或文件的创建、更改、删除等事件。在VS.NET中,我们可以通过创建一个新的C#项目并引入`System.IO`命名空间来使用它: ```csharp using System.IO; ``` ...

    传智播客_俄罗斯方块游戏05_编写Controler类实现事件监听

    在本课程"传智播客_俄罗斯方块游戏05_编写Controller类实现事件监听"中,我们将深入探讨Java编程中的关键概念,特别是面向对象设计和事件处理。这些概念是JavaEE和JavaME开发的基础,对于任何希望在IT领域建立稳固...

    谷歌插件学习 监听网络请求

    在IT领域,尤其是在Web开发和调试中,"谷歌插件学习 监听网络请求"是一个重要的主题。这个标题指的是利用谷歌浏览器(Chrome)的开发者工具来观察和分析网页中的网络活动,特别是异步请求。这样的技能对于理解网页的...

    Java设计模式之监听器模式实例详解

    监听器模式是Java设计模式中的一种行为型模式,主要用于监听某些事件的发生,并在事件发生时自动执行预定义的操作。在实际开发中,监听器模式可以用于多种场景,如UI事件处理、事件广播、异步通知等。 在监听器模式...

    易语言源码易语言监听类的复制源码.rar

    通过分析和学习这个监听类的源码,开发者可以掌握易语言网络编程的基本技巧,了解如何创建高效、稳定的服务器应用程序。此外,源码中的注释和结构也是学习的重点,它们可以帮助我们理解代码的逻辑和设计思路,提高...

    java监听器的实现和原理详解

    在Java中,事件监听器的实现可以通过接口和类来实现。例如,我们可以定义一个事件监听器接口,包含事件处理方法,然后在事件源中注册事件监听器。当事件源触发事件时,事件监听器将被回调,执行相应的事件处理方法。...

    Android数据库内容变化的监听

    Uri 是要监听的 Uri,NotifyForDescendents 是一个 boolean 类型的参数,用于指定是否监听 Uri 的所有子 Uri,ContentObserver 是一个实现了 onChange 方法的对象,该方法将在 Uri 的内容发生变化时被调用。...

    android全局事件监听器

    在Android开发中,全局事件监听器是一种非常实用的设计模式,它允许开发者在整个应用程序范围内监听特定的事件,而无需在每个需要响应的类中都添加监听代码。标题中的"android全局事件监听器"指的是一个实现此类功能...

    java一个监听器的例子

    在Java编程中,监听器(Listener)是一种关键的机制,它允许程序对特定事件进行响应。这个例子将探讨如何在Java中使用监听器,特别是事件监听器,它们是Java Swing和Java AWT库中用于图形用户界面(GUI)交互的核心...

    java监听器+quartz实现每天动态时间执行任务的功能

    在Java编程中,实现每天动态时间执行任务的功能通常涉及到事件监听和定时任务调度。这个项目“java监听器+quartz实现每天动态时间执行任务的功能”是结合了Java的监听器机制和Quartz定时任务框架来完成这样的需求。...

Global site tag (gtag.js) - Google Analytics