Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3336832
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: 系统运维

2010-10-06 16:34:26

1.简介
       继承关系:PropertyChangeEvent Inheritance Inheritance
       如果对象的属性值发生变化,可以派发PropertyChangeEvent事件来表示。
       Flex 数据绑定机制也使用此事件。
       例子请参考《mx.events.PropertyChangeEvent

2.常见属性和方法
2.1 属性PROPERTY_CHANGE
PROPERTY_CHANGE : String = "propertyChange"
[静态] PropertyChangeEvent.PROPERTY_CHANGE 常量可为 PropertyChange 事件定义事件对象的 type 属性的值。

2.2 属性kind
指定更改的类型。String类型
可能的值为 PropertyChangeEventKind.UPDATE、PropertyChangeEventKind.DELETE 和 null

2.3 属性newValue

更改后的属性的值。Object类型

2.4 属性oldValue
更改前的属性的值。Object类型

2.5 属性property
需要更改的属性Object类型

2.6 属性source
发生更改属性的对象。Object类型

2.7 属性currentTarget
用于定义处理该事件的事件侦听器的 Object。Object类型
例如,如果您使用myButton.addEventListener() 注册某个事件侦听器,则 myButton 为 currentTarget 的值。

2.8 属性target
事件目标。Object类型
派发事件的 Object;它不一定是侦听该事件的 Object。使用 currentTarget 属性始终可以访问侦听事件的 Object。

3.PropertyChangeEvent 类举例
3.1SolidColor类派发PropertyChangeEvent事件
详见代码《mx.graphics.SolidColor
  1. public class SolidColor extends EventDispatcher implements IFill{
  2.     ......
  3.     public function set color(value:uint):void {
  4.         var oldValue:uint = _color;
  5.         if (value != oldValue)
  6.         {
  7.             _color = value;
  8.             dispatchFillChangedEvent("color", oldValue, value);
  9.         }
  10.     }
  11.     private function dispatchFillChangedEvent(prop:String, oldValue:*, value:*):void {
  12.         if (hasEventListener("propertyChange"))
  13.             dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, prop,oldValue, value));
  14.     }
  15. }

3.2 派发PropertyChangeEvent事件
       用户可以自己派发该事件,具体代码如下
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx=""
  3.              xmlns:s="library://ns.adobe.com/flex/spark"
  4.              xmlns:mx="library://ns.adobe.com/flex/mx"
  5.              xmlns:exam="myskin.*"
  6.              creationComplete="application1_creationCompleteHandler(event)"
  7.              minWidth="955" minHeight="600">
  8.     
  9.     <fx:Script>
  10.         <![CDATA[
  11.             import mx.events.FlexEvent;
  12.             import mx.events.PropertyChangeEvent;
  13.             protected function button1_clickHandler(event:MouseEvent):void
  14.             {
  15.                 dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "name","name4", this.txtipt.text));
  16.             }
  17.             
  18.             protected function application1_creationCompleteHandler(event:FlexEvent):void
  19.             {
  20.                 this.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,handlerme);
  21.             }
  22.             
  23.             protected function handlerme(event:PropertyChangeEvent):void
  24.             {
  25.                 result.text="kind: "+event.kind+"\n"+"oldValue: "+event.oldValue+"\n"+"newValue: "+event.newValue;
  26.                 
  27.             }
  28.         ]]>
  29.     </fx:Script>
  30.     
  31.     <fx:Declarations>
  32.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->
  33.     </fx:Declarations>
  34.     <s:TextInput id="txtipt" x="231" y="55"/>
  35.     <s:Label x="186" y="61" text="姓名"/>
  36.     <s:TextArea id="result" x="187" y="79" width="146" height="64" text="结果为:"/>
  37.     <s:Button x="367" y="56" label="发送" click="button1_clickHandler(event)"/>
  38.     
  39. </s:Application>
运行结果如下



3.3:利用ObjectProxy对对象进行监控,如果对象发生变化,触发PropertyChangeEvent事件
PropertyChangeExam1.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx=""
  3.                xmlns:s="library://ns.adobe.com/flex/spark"
  4.                xmlns:mx="library://ns.adobe.com/flex/mx"
  5.                creationComplete="init();"
  6.                minWidth="955" minHeight="600">
  7.     <s:layout>
  8.         <s:VerticalLayout/>
  9.     </s:layout>
  10.     <fx:Declarations>
  11.         <mx:ArrayCollection id="arrColl" />
  12.     </fx:Declarations>
  13.    
  14.     <fx:Script>
  15.         <![CDATA[
  16.             import mx.events.PropertyChangeEvent;
  17.             import mx.utils.ObjectProxy;
  18.            
  19.             //实例化一个空对象,没有任何属性
  20.             private var object:Object = {};
  21.             private var objectProxy:ObjectProxy;
  22.            
  23.             private function init():void {
  24.                 objectProxy = new ObjectProxy(object);
  25.                 objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, updateChange);
  26.                 objectProxy.name = "My Object";
  27.                 objectProxy.id = 31;
  28.                
  29.                 //这二个赋值语句不会引发PropertyChangeEvent事件
  30.                 object.isDebug = false;
  31.                 object.id = 33;
  32.                
  33.                 //将id从33改成45,并引发PropertyChangeEvent事件
  34.                 objectProxy.id = 45;
  35.             }
  36.            
  37.             private function updateChange(evt:PropertyChangeEvent):void {
  38.                 arrColl.addItem(evt);
  39.             }
  40.         ]]>
  41.     </fx:Script>
  42.     <mx:DataGrid dataProvider="{arrColl}"
  43.                  sortableColumns="false"
  44.                  draggableColumns="false"
  45.                  width="100%"
  46.                  height="100%">
  47.         <mx:columns>
  48.             <mx:DataGridColumn dataField="type" />
  49.             <mx:DataGridColumn dataField="property" />
  50.             <mx:DataGridColumn dataField="newValue" />
  51.             <mx:DataGridColumn dataField="oldValue" />
  52.             <mx:DataGridColumn dataField="source" />
  53.         </mx:columns>
  54.     </mx:DataGrid>
  55. </s:Application>

运行结果




参考文献
1. PropertyChangeEvent类参考.
/PropertyChangeEvent.html
2.Detecting changes to an Object using the Flex ObjectProxy class. http://blog.flexexamples.com/2007/09/27/detecting-changes-to-an-object-using-the-flex-objectproxy-class/
3.ActionScript 类中属性的 PropertyChangeEvent.http://flex4jiaocheng.com/blog/289

阅读(5063) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~