Egret之属性绑定
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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之属性绑定的主要内容,如果未能解决你的问题,请参考以下文章
Egret之Label属性width与textWidth的区别