Event:

1.事件派发 Dispatching

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

2.监听事件 Listening to Events

在监听事件时应首先考虑是否要使用weak referenced.如果事件监听与派发与监听函数有共同的生命周期,则可以使用strong referenced,在其他的大部分情况下,则应使用weak referenced.

Bindable的三种实现方式:

1.使用Event实现.

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

3.AS中使用ChangeWatcher实现.

Event与Bindable举例:

有一个Person类:

view plaincopy to clipboardprint?

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

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

1.使用Event Bindable:

view plaincopy to clipboardprint?

  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. * 通过对PropertyChangeEvent.property判断是name还是desc被监听,更新屏幕
  13. */
  14. private function propertyChangeHandler(e:PropertyChangeEvent):void {
  15. if(e.property == "name") {
  16. textArea_Name.text = e.newValue.toString();
  17. }else if(e.property == "desc") {
  18. textArea_Desc.text = e.newValue.toString();
  19. }else {
  20. return;
  21. }
  22. trace("view: " + e.property + " Changed");
  23. }
  24. /**
  25. * set age之后更新屏幕
  26. */
  27. private function ageChangedHandler(e:Event):void {
  28. textArea_Age.text = String(person.age);
  29. }

2.MXML使用大括号:

view plaincopy to clipboardprint?

  1. <mx:textarea x="202" y="107" width="131" height="21" wordwrap="true" editable="false" id="textArea_Name" text="{person.name}">
  2. <mx:label x="142" y="158" text="Age:">
  3. <mx:textarea x="202" y="157" width="131" height="21" wordwrap="true" editable="false" id="textArea_Age" text="{person.age}">
  4. <mx:label x="142" y="215" text="Desc:">
  5. <mx:textarea x="202" y="214" width="131" height="71" wordwrap="true" editable="false" id="textArea_Desc" text="{person.desc}">
  6. </mx:textarea></mx:label></mx:textarea></mx:label></mx:textarea>

3.使用AS中的ChangeWatcher

view plaincopy to clipboardprint?

  1. private function init():void {
  2. var nameWatcher:ChangeWatcher;
  3. var ageWatcher:ChangeWatcher;
  4. var descWatcher:ChangeWatcher;
  5. var canWatche:ChangeWatcher;
  6. //nameWatcher = BindingUtils.bindProperty(textArea_Name,"text",person,"name");
  7. ChangeWatcher.watch(person,"name",nameSetter);
  8. ageWatcher = BindingUtils.bindProperty(textArea_Age,"text",person,String("age"));
  9. descWatcher = BindingUtils.bindProperty(textArea_Desc,"text",person,"desc",true);
  10. }
  11. private function nameSetter(e:PropertyChangeEvent):void {
  12. if(e==null) {
  13. return;
  14. }
  15. textArea_Name.text = e.newValue.toString();
  16. trace("Name Changed by nameSetter on the Event " + e + " to " + e.newValue);
  17. }
  18. private function ageSetter(e:Event):void {
  19. //textArea_Age.text = String(person.age);
  20. trace("Age is setted by ageSetter on the Event " + " to " + person.age);
  21. }

转载于:https://www.cnblogs.com/jiayuan/archive/2010/01/04/1638797.html

[学习笔记]Event与Bindable相关推荐

  1. 【Rollo的Python之路】Python 同步条件 学习笔记 Event

    Python 同步条件: 条件同步和条件变量同步差不多,只是少了锁 功能,因为条件同步设计于不访问共享资源的条件环境.event = threading.Event():条件环境对象 初始值为:Fal ...

  2. Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)

    Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser) 模块:dojo.event 终于进入有名的dojo事件处 ...

  3. Composite UI Application Block学习笔记之Event Broker

    Composite UI Application Block着重于将应用逻辑和界面分开,让应用系统具备更清晰的结构,更强的扩展性.可移植性.在曹严明先生的讲座中,提及到了关于应用CAB开发的几个指导性 ...

  4. input回车触发事件_JavaScript学习笔记(十五)-- Event事件(上)

    EVENT(上) 之前我们简单的了解过一些事件,比如 onclick / onload / onscroll / ... 今天开始,我们详细的学习一些 事件 什么是事件 一个事件由什么东西组成 触发谁 ...

  5. 学习笔记之——Event Camera(事件相机)调研

    本博文是本人调研Event Camera写下的学习记录,本博文的内容来源于网络.paper以及本人学习调研过程的心得,仅供本人学习记录用,不作商业用途. 我们团队在事件相机方面的工作请见: GitHu ...

  6. libevent学习笔记六:libevent核心事件event

    libevent学习笔记六:libevent核心事件event 前面对reactor模式.事件处理流程.libevent源代码结构等有了高层的认识后,接下来将详细介绍libevent的核心结构even ...

  7. Flex_大师之路学习笔记

    Flex_大师之路学习笔记 flash 的三种运行环境 flash player air flash lite 企业有年会,其实我的家庭也应该有年会. 像理企业一样理家庭! 在企业里工作不好,我觉得在 ...

  8. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  9. Json.Net学习笔记

    Json.Net学习笔记 摘自:  http://www.verydemo.com/demo_c360_i45119.html 分类: 编程语言/ ASP.NET/ 文章 导读:string goog ...

最新文章

  1. w7计算机的工具栏爱那里,Win7系统如何在任务栏中添加爱心图标图文教程
  2. django ajax文件上传,django 之 ajax 篇 上传文件
  3. Asp.net 2.0 动态加载其他子目录用户控件问题
  4. 1.5w字的Rmarkdown入门教程汇总
  5. 北亚利桑那大学等推出:航拍森林火情检测数据集 FLAME
  6. hdu 5710 Digit-Sum (构造题)
  7. 转:CDC,CPaintDC,CClientDC,CWindowDC区别
  8. 傅盛希望定义AI时代的机器人产品,2年交出这份可落地答卷
  9. 象棋游戏显示服务器断开,天天象棋黑屏闪退怎么办 游戏玩不了解决方法
  10. M70仿真系统软件下载和使用
  11. 渠道为王:销售渠道建设3部曲 读后感
  12. pwnablekr-asm-seccomp-sandbox
  13. RGB-D相机(Azure Kinect DK)RGB图、深度图的获取,配准与保存
  14. 数学家们是怎么玩趣味拼图游戏的?
  15. SCRM:SpringBoot + RabbitMQ + 企微 实现发送消息到企业微信
  16. 【iOS】Sign in with Apple
  17. csr867x入门之触摸按键配置(十一)
  18. IBM裁员1700人不可怕,可怕的是裁员带来的恐慌!
  19. mysql子查询效率高_mysql利用子查询效率怎么样
  20. cloud-music

热门文章

  1. 一篇很形象的文章,什么是数字签名?
  2. IOS正则表达式的用法简介
  3. Java中如何获得集合变量的集合中的类型参数
  4. ora-01034 / ORA-27101 错误.
  5. Kotlin替换Dagger2/Hilt的依赖注入框架--Koin。
  6. 磁盘空间去向不明的问题
  7. [MySQL光速入门]012 作业解答
  8. opencv多线程显示的问题和解决方法
  9. .net IDE 界面编程AutoScale属性惹的大麻烦
  10. [P2387魔法森林