`
人帅刀猛
  • 浏览: 38758 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

ActionScript 类中属性的 PropertyChangeEvent

    博客分类:
  • flex
 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics