溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Egret之屬性綁定

發(fā)布時(shí)間:2020-07-15 21:37:51 來(lái)源:網(wǎng)絡(luò) 閱讀:2288 作者:Aonaufly 欄目:開(kāi)發(fā)技術(shù)

一 , DataModel(數(shù)據(jù)類)

①:需要繼承 bind.BaseBindModel(為了發(fā)送屬性數(shù)據(jù))

②:需要監(jiān)聽(tīng)的數(shù)值需要寫(xiě)setter/getter

③:在setter中使用changeValue方法

changeValue方法參數(shù)

1,屬性名稱

2,與屬性對(duì)應(yīng)的字段名稱

3,值(要賦的值)

如:

module app {
	/**
	 * 數(shù)據(jù)類-成員需要綁定
	 */
	export class DataTest extends bind.BaseBindModel {
		private _name : string = "Kayer";
		private _combat : number = 1;
		/**
		 * 設(shè)置名稱
		 */
		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(獲取他地方)綁定數(shù)值

①:綁定需要使用bind.BindTool類(為了獲得發(fā)送的屬性數(shù)據(jù)并更新)

②:綁定方案有2種

1,屬性綁定 : 直接將新值賦給綁定的值

靜態(tài)方法 bindProperty<T>

參數(shù)5( 最后一個(gè)參數(shù) ) : 是否馬上用DataModel里面的值為View賦值,默認(rèn)true

2,回調(diào)方法綁定 :

a,回調(diào)方法參數(shù)為 IBindEventData<T>

靜態(tài)方法 bindCallBack<T>

參數(shù)4(最后一個(gè)參數(shù)):是否馬上用DataModel里面的值為View賦值,默認(rèn)true

③:銷毀

bindProperty<T> 和  bindCallBack<T> 都會(huì)返回類 : Bind2Subscriber<T>

Bind2Subscriber<T>提供了銷毀方法 : destory(),不需要監(jiān)聽(tīng)(view關(guān)閉時(shí))調(diào)用一下

如:

	/**
	 * 數(shù)據(jù)類-成員需要綁定
	 */
	export class DataTest extends bind.BaseBindModel {
		private _name : string = "Kayer";
		private _combat : number = 1;
		/**
		 * 設(shè)置名稱
		 */
		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(獲取他地方)綁定數(shù)值
①:綁定需要使用bind.BindTool方法
②:綁定方案有2種
1,屬性綁定 : 直接將新值賦給綁定的值
靜態(tài)方法 bindProperty<T>
參數(shù)5( 最后一個(gè)參數(shù) ) : 是否馬上用DataModel里面的值為View賦值,默認(rèn)true
2,回調(diào)方法綁定 :
a,回調(diào)方法參數(shù)為 IBindEventData<T>
靜態(tài)方法 bindCallBack<T>
參數(shù)4(最后一個(gè)參數(shù)):是否馬上用DataModel里面的值為View賦值,默認(rèn)true
③:銷毀
bindProperty<T> 和  bindCallBack<T> 都會(huì)返回類 : Bind2Subscriber<T>
Bind2Subscriber<T>提供了銷毀方法 : destory(),不需要監(jiān)聽(tīng)(view關(guān)閉時(shí))調(diào)用一下
如:
		private vName : string = "CCCC";
		private vCombat : number = 0;
		private dataTest : DataTest = null;
		private dBind : bind.Bind2Subscriber<string> = null;//不用時(shí)需要銷毀
		private dBind2 : bind.Bind2Subscriber<number> = null;//不用時(shí)需要銷毀
		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("======= 綁定回調(diào)方法 ======");
			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{
				//監(jiān)聽(tīng)值
				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;
			}
		}

結(jié)果:

Egret之屬性綁定

附件:http://down.51cto.com/data/2368703
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI