加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex中Event与Bindable

发布时间:2020-12-15 01:02:33 所属栏目:百科 来源:网络整理
导读:? Event: 1.事件派发 Dispatching Flash.events.EventDispacher类提供了事件dispatch函数,如果需要dispatch事件,则应该考虑继承该类或其子类.如果不能继承该类,则应事先IEventDispatcher接口 2.监听事件 Listening to Events 在监听事件时应首先考虑是否要使
?

Event:

1.事件派发 Dispatching

Flash.events.EventDispacher类提供了事件dispatch函数,如果需要dispatch事件,则应该考虑继承该类或其子类.如果不能继承该类,则应事先IEventDispatcher接口

2.监听事件 Listening to Events

在监听事件时应首先考虑是否要使用weak referenced.如果事件监听与派发与监听函数有共同的生命周期,则可以使用strong referenced,在其他的大部分情况下,则应使用weak referenced.
需要注意的是,如果事件派发者属性为Public,则在任何允许的地方都可以增加监听函数,从而达到低内聚,更易于操作.

?

Bindable的三种实现方式:

1.使用Event实现.

2.MXML中使用大括号实现.

3.AS中使用ChangeWatcher实现.

Event与Bindable举例:

有一个Person类:

?
Java代码

?

  1. package?com.insprise ??
  2. { ??
  3. import?flash.events.Event; ??
  4. import?flash.events.EventDispatcher; ??
  5. import?mx.events.PropertyChangeEvent;? ??
  6. ??
  7. public?class?Person?extends?EventDispatcher ??
  8. { ??
  9. private?var?_name:String; ??
  10. private?var?_age:int; ??
  11. private?var?_desc:String; ??
  12. /** ?
  13. *?构造函数 ?
  14. */??
  15. public?function?Person() ??
  16. { ??
  17. super(); ??
  18. } ??
  19. /** ?
  20. *?Get&Set?Name?SetName时dispatch一个PropertyChangeEvent事件 ?
  21. */??
  22. [Bindable(event="propertyChange")] ??
  23. public?function?get?name():String?{ ??
  24. trace("Get?name:?"?+?_name); ??
  25. return?_name; ??
  26. } ??
  27. public?function?set?name(name_:String):void?{ ??
  28. if(name_?==?_name)?{ ??
  29. return; ??
  30. } ??
  31. var?old:String?=?this._name; ??
  32. this._name?=?name_; ??
  33. trace("Set?Name?to:?"?+?name_); ??
  34. dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,"name",old,name_)); ??
  35. } ??
  36. /** ?
  37. *?Get&Set?age;?age被Set的时候会dispatch一个ageChanged事件. ?
  38. */??
  39. [Bindable(event="ageChanged")] ??
  40. public?function?get?age():int?{ ??
  41. trace("Get?age:?"?+?_age); ??
  42. return?_age; ??
  43. } ??
  44. public?function?set?age(age_:int):void?{ ??
  45. if(age_?==?_age)?{ ??
  46. return; ??
  47. } ??
  48. var?old:int?=?this._age; ??
  49. this._age?=?age_; ??
  50. trace("Set?Age?to:?"?+?age_); ??
  51. dispatchEvent(new?Event("ageChanged")); ??
  52. ??
  53. } ??
  54. /** ?
  55. *?Get&Set?Desc;desc被set时会自动dispatch一个PropertyChangeEvent. ?
  56. */??
  57. [Bindable] ??
  58. public?function?get?desc():String?{ ??
  59. trace("Get?desc:?"?+?_desc); ??
  60. return?_desc; ??
  61. } ??
  62. public?function?set?desc(desc_:String):void?{ ??
  63. if(desc_?==?_desc)?{ ??
  64. return; ??
  65. } ??
  66. var?old:String?=?this._desc; ??
  67. this._desc?=?desc_; ??
  68. trace("Set?desc?to:?"?+?desc_); ??
  69. } ??
  70. } ??
  71. }??

现在我们通过上面提到的三种方式实现Bindable:

1.使用Event Bindable:

Java代码

?

  1. import?mx.events.PropertyChangeEvent; ??
  2. import?com.insprise.Person; ??
  3. var?person:Person?=?new?Person(); ??
  4. /** ?
  5. *?监听PropertyChangeEvent与ageChanged事件 ?
  6. */??
  7. private?function?init():void?{ ??
  8. person.addEventListener("propertyChange",propertyChangeHandler); ??
  9. person.addEventListener("ageChanged",ageChangedHandler); ??
  10. } ??
  11. ??
  12. /** ?
  13. *?通过对PropertyChangeEvent.property判断是name还是desc被监听,更新屏幕 ?
  14. */??
  15. private?function?propertyChangeHandler(e:PropertyChangeEvent):void?{ ??
  16. if(e.property?==?"name")?{ ??
  17. textArea_Name.text?=?e.newValue.toString(); ??
  18. }else?if(e.property?==?"desc")?{ ??
  19. textArea_Desc.text?=?e.newValue.toString(); ??
  20. }else?{ ??
  21. return; ??
  22. } ??
  23. trace("view:?"?+?e.property?+?"?Changed"); ??
  24. } ??
  25. ??
  26. /** ?
  27. *?set?age之后更新屏幕 ?
  28. */??
  29. private?function?ageChangedHandler(e:Event):void?{ ??
  30. textArea_Age.text?=?String(person.age); ??
  31. }??

2.MXML使用大括号:

3.使用AS中的ChangeWatcher

Java代码

?

  1. private?function?init():void?{??? ??
  2. ?? ??
  3. ????var?nameWatcher:ChangeWatcher;??? ??
  4. ?? ??
  5. ????var?ageWatcher:ChangeWatcher;??? ??
  6. ?? ??
  7. ????var?descWatcher:ChangeWatcher;??? ??
  8. ?? ??
  9. ????var?canWatche:ChangeWatcher;??? ??
  10. ?? ??
  11. ????//nameWatcher?=?BindingUtils.bindProperty(textArea_Name,"text",person,"name");??? ??
  12. ?? ??
  13. ????ChangeWatcher.watch(person,nameSetter);??? ??
  14. ?? ??
  15. ????ageWatcher?=?BindingUtils.bindProperty(textArea_Age,"text",String("age"));??? ??
  16. ?? ??
  17. ????descWatcher?=?BindingUtils.bindProperty(textArea_Desc,"desc",true);??? ??
  18. ?? ??
  19. }??? ??
  20. ?? ??
  21. private?function?nameSetter(e:PropertyChangeEvent):void?{??? ??
  22. ?? ??
  23. ????if(e==null)?{??? ??
  24. ?? ??
  25. ????????return;??? ??
  26. ?? ??
  27. ????}??? ??
  28. ?? ??
  29. ????textArea_Name.text?=?e.newValue.toString();??? ??
  30. ?? ??
  31. ????trace("Name?Changed?by?nameSetter?on?the?Event?"?+?e?+?"?to?"?+?e.newValue);??? ??
  32. ?? ??
  33. }???? ??
  34. ?? ??
  35. private?function?ageSetter(e:Event):void?{??? ??
  36. ?? ??
  37. ????//textArea_Age.text?=?String(person.age);??? ??
  38. ?? ??
  39. ????trace("Age?is?setted?by?ageSetter?on?the?Event?"?+?"?to?"?+?person.age);??? ??
  40. ?? ??
  41. }????

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读