[学习笔记]Event与Bindable
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?
- package com.insprise
- {
- import flash.events.Event;
- import flash.events.EventDispatcher;
- import mx.events.PropertyChangeEvent;
- public class Person extends EventDispatcher
- {
- private var _name:String;
- private var _age:int;
- private var _desc:String;
- /**
- * 构造函数
- */
- public function Person()
- {
- super();
- }
- /**
- * Get&Set Name SetName时dispatch一个PropertyChangeEvent事件
- */
- [Bindable(event="propertyChange")]
- public function get name():String {
- trace("Get name: " + _name);
- return _name;
- }
- public function set name(name_:String):void {
- if(name_ == _name) {
- return;
- }
- var old:String = this._name;
- this._name = name_;
- trace("Set Name to: " + name_);
- dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,"name",old,name_));
- }
- /**
- * Get&Set age; age被Set的时候会dispatch一个ageChanged事件.
- */
- [Bindable(event="ageChanged")]
- public function get age():int {
- trace("Get age: " + _age);
- return _age;
- }
- public function set age(age_:int):void {
- if(age_ == _age) {
- return;
- }
- var old:int = this._age;
- this._age = age_;
- trace("Set Age to: " + age_);
- dispatchEvent(new Event("ageChanged"));
- }
- /**
- * Get&Set Desc;desc被set时会自动dispatch一个PropertyChangeEvent.
- */
- [Bindable]
- public function get desc():String {
- trace("Get desc: " + _desc);
- return _desc;
- }
- public function set desc(desc_:String):void {
- if(desc_ == _desc) {
- return;
- }
- var old:String = this._desc;
- this._desc = desc_;
- trace("Set desc to: " + desc_);
- }
- }
- }
现在我们通过上面提到的三种方式实现Bindable:
1.使用Event Bindable:
view plaincopy to clipboardprint?
- import mx.events.PropertyChangeEvent;
- import com.insprise.Person;
- var person:Person = new Person();
- /**
- * 监听PropertyChangeEvent与ageChanged事件
- */
- private function init():void {
- person.addEventListener("propertyChange",propertyChangeHandler);
- person.addEventListener("ageChanged",ageChangedHandler);
- }
- /**
- * 通过对PropertyChangeEvent.property判断是name还是desc被监听,更新屏幕
- */
- private function propertyChangeHandler(e:PropertyChangeEvent):void {
- if(e.property == "name") {
- textArea_Name.text = e.newValue.toString();
- }else if(e.property == "desc") {
- textArea_Desc.text = e.newValue.toString();
- }else {
- return;
- }
- trace("view: " + e.property + " Changed");
- }
- /**
- * set age之后更新屏幕
- */
- private function ageChangedHandler(e:Event):void {
- textArea_Age.text = String(person.age);
- }
2.MXML使用大括号:
view plaincopy to clipboardprint?
- <mx:textarea x="202" y="107" width="131" height="21" wordwrap="true" editable="false" id="textArea_Name" text="{person.name}">
- <mx:label x="142" y="158" text="Age:">
- <mx:textarea x="202" y="157" width="131" height="21" wordwrap="true" editable="false" id="textArea_Age" text="{person.age}">
- <mx:label x="142" y="215" text="Desc:">
- <mx:textarea x="202" y="214" width="131" height="71" wordwrap="true" editable="false" id="textArea_Desc" text="{person.desc}">
- </mx:textarea></mx:label></mx:textarea></mx:label></mx:textarea>
3.使用AS中的ChangeWatcher
view plaincopy to clipboardprint?
- private function init():void {
- var nameWatcher:ChangeWatcher;
- var ageWatcher:ChangeWatcher;
- var descWatcher:ChangeWatcher;
- var canWatche:ChangeWatcher;
- //nameWatcher = BindingUtils.bindProperty(textArea_Name,"text",person,"name");
- ChangeWatcher.watch(person,"name",nameSetter);
- ageWatcher = BindingUtils.bindProperty(textArea_Age,"text",person,String("age"));
- descWatcher = BindingUtils.bindProperty(textArea_Desc,"text",person,"desc",true);
- }
- private function nameSetter(e:PropertyChangeEvent):void {
- if(e==null) {
- return;
- }
- textArea_Name.text = e.newValue.toString();
- trace("Name Changed by nameSetter on the Event " + e + " to " + e.newValue);
- }
- private function ageSetter(e:Event):void {
- //textArea_Age.text = String(person.age);
- trace("Age is setted by ageSetter on the Event " + " to " + person.age);
- }
转载于:https://www.cnblogs.com/jiayuan/archive/2010/01/04/1638797.html
[学习笔记]Event与Bindable相关推荐
- 【Rollo的Python之路】Python 同步条件 学习笔记 Event
Python 同步条件: 条件同步和条件变量同步差不多,只是少了锁 功能,因为条件同步设计于不访问共享资源的条件环境.event = threading.Event():条件环境对象 初始值为:Fal ...
- Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)
Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser) 模块:dojo.event 终于进入有名的dojo事件处 ...
- Composite UI Application Block学习笔记之Event Broker
Composite UI Application Block着重于将应用逻辑和界面分开,让应用系统具备更清晰的结构,更强的扩展性.可移植性.在曹严明先生的讲座中,提及到了关于应用CAB开发的几个指导性 ...
- input回车触发事件_JavaScript学习笔记(十五)-- Event事件(上)
EVENT(上) 之前我们简单的了解过一些事件,比如 onclick / onload / onscroll / ... 今天开始,我们详细的学习一些 事件 什么是事件 一个事件由什么东西组成 触发谁 ...
- 学习笔记之——Event Camera(事件相机)调研
本博文是本人调研Event Camera写下的学习记录,本博文的内容来源于网络.paper以及本人学习调研过程的心得,仅供本人学习记录用,不作商业用途. 我们团队在事件相机方面的工作请见: GitHu ...
- libevent学习笔记六:libevent核心事件event
libevent学习笔记六:libevent核心事件event 前面对reactor模式.事件处理流程.libevent源代码结构等有了高层的认识后,接下来将详细介绍libevent的核心结构even ...
- Flex_大师之路学习笔记
Flex_大师之路学习笔记 flash 的三种运行环境 flash player air flash lite 企业有年会,其实我的家庭也应该有年会. 像理企业一样理家庭! 在企业里工作不好,我觉得在 ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- Json.Net学习笔记
Json.Net学习笔记 摘自: http://www.verydemo.com/demo_c360_i45119.html 分类: 编程语言/ ASP.NET/ 文章 导读:string goog ...
最新文章
- w7计算机的工具栏爱那里,Win7系统如何在任务栏中添加爱心图标图文教程
- django ajax文件上传,django 之 ajax 篇 上传文件
- Asp.net 2.0 动态加载其他子目录用户控件问题
- 1.5w字的Rmarkdown入门教程汇总
- 北亚利桑那大学等推出:航拍森林火情检测数据集 FLAME
- hdu 5710 Digit-Sum (构造题)
- 转:CDC,CPaintDC,CClientDC,CWindowDC区别
- 傅盛希望定义AI时代的机器人产品,2年交出这份可落地答卷
- 象棋游戏显示服务器断开,天天象棋黑屏闪退怎么办 游戏玩不了解决方法
- M70仿真系统软件下载和使用
- 渠道为王:销售渠道建设3部曲 读后感
- pwnablekr-asm-seccomp-sandbox
- RGB-D相机(Azure Kinect DK)RGB图、深度图的获取,配准与保存
- 数学家们是怎么玩趣味拼图游戏的?
- SCRM:SpringBoot + RabbitMQ + 企微 实现发送消息到企业微信
- 【iOS】Sign in with Apple
- csr867x入门之触摸按键配置(十一)
- IBM裁员1700人不可怕,可怕的是裁员带来的恐慌!
- mysql子查询效率高_mysql利用子查询效率怎么样
- cloud-music