日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[学习笔记]Event与Bindable

發(fā)布時間:2024/4/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [学习笔记]Event与Bindable 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Event:

1.事件派發(fā) Dispatching

Flash.events.EventDispacher類提供了事件dispatch函數(shù),如果需要dispatch事件,則應(yīng)該考慮繼承該類或其子類.如果不能繼承該類,則應(yīng)實現(xiàn)IEventDispatcher接口?

2.監(jiān)聽事件 Listening to Events

在監(jiān)聽事件時應(yīng)首先考慮是否要使用weak referenced.如果事件監(jiān)聽與派發(fā)與監(jiān)聽函數(shù)有共同的生命周期,則可以使用strong referenced,在其他的大部分情況下,則應(yīng)使用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)容還不錯,歡迎將生活随笔推薦給好友。