Egret之屬性綁定
阿新 • • 發佈:2017-10-28
egret 屬性綁定
一 , DataModel(數據類)
①:需要繼承 bind.BaseBindModel(為了發送屬性數據)
②:需要監聽的數值需要寫setter/getter
③:在setter中使用changeValue方法
changeValue方法參數
1,屬性名稱
2,與屬性對應的字段名稱
3,值(要賦的值)
如:
module app { /** * 數據類-成員需要綁定 */ export class DataTest extends bind.BaseBindModel { private _name : string = "Kayer"; private _combat : number = 1; /** * 設置名稱 */ public set Name( $name : string ){ this.changeValue<string>("Name","_name",$name); } /** * 獲取名稱 */ public get Name() : string{ return this._name; } public set Combat( $combat : number ){ this.changeValue<number>("Combat","_combat",$combat); } public get Combat() : number{ return this._combat; } public constructor() { super(); } } }
二,在View(獲取他地方)綁定數值
①:綁定需要使用bind.BindTool類(為了獲得發送的屬性數據並更新)
②:綁定方案有2種
1,屬性綁定 : 直接將新值賦給綁定的值
靜態方法 bindProperty<T>
參數5( 最後一個參數 ) : 是否馬上用DataModel裏面的值為View賦值,默認true
2,回調方法綁定 :
a,回調方法參數為 IBindEventData<T>
靜態方法 bindCallBack<T>
參數4(最後一個參數):是否馬上用DataModel裏面的值為View賦值,默認true
③:銷毀
bindProperty<T> 和 bindCallBack<T> 都會返回類 : Bind2Subscriber<T>
Bind2Subscriber<T>提供了銷毀方法 : destory(),不需要監聽(view關閉時)調用一下
如:
/** * 數據類-成員需要綁定 */ export class DataTest extends bind.BaseBindModel { private _name : string = "Kayer"; private _combat : number = 1; /** * 設置名稱 */ public set Name( $name : string ){ this.changeValue<string>("Name","_name",$name); } /** * 獲取名稱 */ public get Name() : string{ return this._name; } public set Combat( $combat : number ){ this.changeValue<number>("Combat","_combat",$combat); } public get Combat() : number{ return this._combat; } public constructor() { super(); } } } 二,在View(獲取他地方)綁定數值 ①:綁定需要使用bind.BindTool方法 ②:綁定方案有2種 1,屬性綁定 : 直接將新值賦給綁定的值 靜態方法 bindProperty<T> 參數5( 最後一個參數 ) : 是否馬上用DataModel裏面的值為View賦值,默認true 2,回調方法綁定 : a,回調方法參數為 IBindEventData<T> 靜態方法 bindCallBack<T> 參數4(最後一個參數):是否馬上用DataModel裏面的值為View賦值,默認true ③:銷毀 bindProperty<T> 和 bindCallBack<T> 都會返回類 : Bind2Subscriber<T> Bind2Subscriber<T>提供了銷毀方法 : destory(),不需要監聽(view關閉時)調用一下 如: private vName : string = "CCCC"; private vCombat : number = 0; private dataTest : DataTest = null; private dBind : bind.Bind2Subscriber<string> = null;//不用時需要銷毀 private dBind2 : bind.Bind2Subscriber<number> = null;//不用時需要銷毀 public constructor() { super(); this.skinName = "resource/eui_skins/ButtonDemo.exml"; egret.log( "init vName : " + this.vName ); this.dataTest = new DataTest(); egret.log( "======= 綁定字段(屬性) ======" ); this.dBind = bind.BindTool.bindProperty(this,"vName", this.dataTest , "Name",true); egret.log( "initChange vName : " + this.vName ); this.dataTest.Name = "Aonaufly"; egret.log( "Changed2Listener vName : " + this.vName ); egret.log("======= 綁定回調方法 ======"); egret.log("init vCombat :" + this.vCombat); this.dBind2 = bind.BindTool.bindCallBack( this.bindCallBack , this.dataTest , "Combat" , true ); this.dataTest.Combat = 7; } private bindCallBack( $data : bind.IBindEventData<number> ):void{ if( $data.$oldValue == undefined ){ //初始化值 egret.log( "initChange vCombat :" + $data.$newValue ); }else{ //監聽值 egret.log( "Changed2Listener vCombet :" ); egret.log( "oldValue is : " + $data.$oldValue); egret.log( "newValue is : " + $data.$newValue ); } this.vCombat = $data.$newValue;//賦新值 } /** * 銷毀 */ public destory() : void{ if( this.dBind != null ){ this.dBind.destory(); this.dBind = null; } if( this.dBind2 != null ){ this.dBind2.destory(); this.dBind2 = null; } }
結果:
本文出自 “Better_Power_Wisdom” 博客,請務必保留此出處http://aonaufly.blog.51cto.com/3554853/1977030
Egret之屬性綁定