首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

ActionScript 种中属性的 PropertyChangeEvent

2012-09-09 
ActionScript 类中属性的 PropertyChangeEventSWF: ×××××××××××××××PropertyChangeEvent 类代表对象的一个

ActionScript 类中属性的 PropertyChangeEvent

SWF: ×××××××××××××××
PropertyChangeEvent 类代表对象的一个属性发生更改时传递到事件侦听器的事件对象,并提供有关更改的信息。此事件由集合类使用,并且是集合了解其提供的数据发生更改的
唯一方式。Flex 数据绑定机制也使用此事件。
但是,不是所有自定义类的属性都会监听到PropertyChangeEvent的抛出,这个跟属性的写法有关系!
?
比如下例中的 User 类的属性, 他们都有不一样的写法:
{
name:String
name1:String //getter && setter 属性
name2:String //getter && setter 方法 (被挖空的,没有中间变量的 getter && setter 属性)
name3:String //绑定事件的 getter && setter 属性 (当某事件抛出时该方法会再执行,类似事件监听器)
name4:String //抛出事件的 getter && setter 属性 (属性改变,抛出事件告诉大家去更新;getter上绑定了该事件)?
?
??????
}
?
大家看看各种写法的属性,再试试下面的操作,会不会发现一些规律:
?×××××××××××××××××××××?
结论:
?
1.对于一搬的属性,可以监听到 PropertyChangeEvent 事件;
2.对于一个"干净的"getter && setter 属性可以按1得出的结论来看待;
3.一个属性的改变由setter负责抛出 "PropertyChangeEvent", getter 负责做这个事件的监听器, 从而更新显示这个属性的值;
4.对于一个绑定了事件的"getter"方法,他听不到自己的"PropertyChangeEvent".(好像是被新的事件绑定覆盖了, 没仔细研究,曾经试过在getter上再绑定一
?
个"PropertyChangeEvent", 没成功! 有兴趣的朋友可以试试.)
5.虽然这样更新数据显示没有问题, 但是"PropertyChangeEvent"还是不会抛出来! 这会带来一些麻烦:一些类如果通过属性改变时抛出的"PropertyChangeEvent"来做更新操作的
?
话, 这个属性的改变会检测不到。 如 CollectionEvent 中的 CollectionEventKind.UPDATE.
?
建议:
?
如果有1)写法的朋友请改成2), 因为2)的setter自己就会抛出"PropertyChangeEvent"告诉getter要怎么做,
而且1)这样写getter会把它原来的(类似[Bindalbe("PropertyChangeEvent")])事件绑定给覆盖掉的 :)
1)
private var _name4:String = "email4";
[Bindable("change")]
public function get name4():String {
return _name4;
}
public function set name4(val:String):void {
_name4 = val;
dispatchEvent(new Event("change"))
}
?
2)
private var _name1:String = "name1";
public function get name1():String {
return _name1;
}
public function set name1(val:String):void {
_name1 = val;
}

文章来源: 我要学flash网(www.51xflash.com) 原文地址:http://www.51xflash.com/article/flex/201105/18-13957.html

热点排行