生活随笔
收集整理的這篇文章主要介紹了
[学习笔记]Event与Bindable
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Event:
1.事件派發(fā) Dispatching
Flash.events.EventDispacher類提供了事件dispatch函數(shù),如果需要dispatch事件,則應該考慮繼承該類或其子類.如果不能繼承該類,則應實現(xiàn)IEventDispatcher接口?
2.監(jiān)聽事件 Listening to Events
在監(jiān)聽事件時應首先考慮是否要使用weak referenced.如果事件監(jiān)聽與派發(fā)與監(jiān)聽函數(shù)有共同的生命周期,則可以使用strong referenced,在其他的大部分情況下,則應使用weak referenced.
Bindable的三種實現(xiàn)方式:
1.使用Event實現(xiàn).
2.MXML中使用大括號實現(xiàn).
3.AS中使用ChangeWatcher實現(xiàn).
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;??? /**? ???????? * 構(gòu)造函數(shù)? ???????? */ 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_);??? ??????? }?????????????? ??? }??? }?? 現(xiàn)在我們通過上面提到的三種方式實現(xiàn)Bindable:
1.使用Event Bindable:
view plaincopy to clipboardprint?
import mx.events.PropertyChangeEvent;?? import com.insprise.Person;?? var person:Person = new Person();?? /** * 監(jiān)聽PropertyChangeEvent與ageChanged事件 */ private function init():void {?? ??? person.addEventListener("propertyChange",propertyChangeHandler);?? ??? person.addEventListener("ageChanged",ageChangedHandler);?? }?? /** * 通過對PropertyChangeEvent.property判斷是name還是desc被監(jiān)聽,更新屏幕 */ 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);?????????????? }?
轉(zhuǎn)載于:https://www.cnblogs.com/jiayuan/archive/2010/01/04/1638797.html
總結(jié)
以上是生活随笔為你收集整理的[学习笔记]Event与Bindable的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。