AS3 属性绑定
admin
2023-07-29 06:40:06
0

纵然AS3中有addEventListener 和 removeEventListener方案,但是面对情况多变的属性value值,这2个参数还是显得力不从心。例如在Game中,玩家的exp , lv ,  combat等等变化的话总是需要通知很多的功能模块,而exp , lv , combat这些信息有时候并不在一个model(data)里面,使用addEventListener 和 removeEventListener,显得很臃肿 , 今天本人提供一种封装,可以轻松的解决Model到UI的属性监听问题:

需要用到BindTool.swc将在附件中提供。

前景 : 假设有View 对 User(model)里面的属性(hp , state)进行监听

关于 User(model):瑕疵是 字段(_hp , _state 必须被public修饰 , 有时间本人会继续的改进)


package com
{
import com.bind.BaseData;
import flash.events.IEventDispatcher;
public final class User extends BaseData
{
  public function User(target:IEventDispatcher=null)
  {
   super(target);
  }
 
  public var _hp : int = 20;
  public function set HP( value : int ) : void
  {
   //设置并注册(在基类中完成设置新值并广播)
   this.changeValue( "HP" , "_hp" , value );//属性名称 , 对应的字段名称 , 值(当前的)
  }
  public function get HP():int
  {
   return _hp;
  }
 
  public var _state : uint = 10;
 
  public function set State( value : uint ):void
  {
   this.changeValue( "State" , "_state" , value );//属性名称 , 对应的字段名称 , 值(当前的)
  }
  public function get State():uint
  {
   return this._state;
  }
}
}


假设 AS3  属性绑定UserView.as需要监听 User的HP 和 State

package com
{
 import com.bind.BindTools;
 
 import flash.display.Sprite;
 /**
  * 模拟一个窗口 , 当User中hp改变时 , 此窗口的相应值也会随之改变
  */
 public final class UserView extends Sprite
 {
     private var user : User = null;
  
  private var _hp_view : int = 0;
  public function set HP_view( value : int ) : void
  {
   trace("HP_view 的值发生了改变  "  + _hp_view +  " -> " + value );
   this._hp_view = value;
   
  }
  
  public function UserView( user : User )
  {
   super();
   this.user = user;
   //绑定属性 ----------------------------------------------------------
   // this -> 本类
   // HP_view -> 本类需要与user类(第三个参数)中HP属性映射的属性
   // user model类
   // HP
   // true 是否用HP初始化HP_view
   BindTools.bindProperty( this , "HP_view" , user , "HP" , true );
   
   //绑定回调方法--------------------------------------------------------
   // this._user_state_callback 回调方法
   // user model类
   // State 需要监听的user的属性
   // true 是否初始化调用_user_state_callback
   BindTools.bindSetter( this._user_state_callback , user , "State" , true );
  }
  private function _user_state_callback( value : uint ) : void
  {
   trace("State回调 得到的值为 :" + value );
  }
 }
}

测试:

package
{
 import com.User;
 import com.UserView;
 
 import flash.display.Sprite;
 
 public class BindTest_AS extends Sprite
 {
  public function BindTest_AS()
  {
   var user : User = new User();
   var view_sprite : UserView = new UserView( user );
   this.addChild( view_sprite );
   user.HP = 200;
   user.State = 5;
   
   trace( "user.HP" , user.HP );
   trace( "user.State" , user.State );
   
  }
 }
}

结果:

AS3  属性绑定

附件:http://down.51cto.com/data/2366826

相关内容

热门资讯

装修步骤先后顺序(装修的顺序是... 摘要:顺序一、先需求后设计,平面布局是第一步,也是室内设计最关键的一步,它直接决定了你入住后的生活舒...
万和热水器锁定了怎么解锁 万和热水器锁定了怎么解锁1、可以长按升温间或降温间3到5秒。2、可以长按开机键3到5秒。3、可以参考...
万和燃气热水器锁住要怎么才可以... 万和燃气热水器锁住要怎么才可以解锁啊?需要将热水器关闭电源然后重新开启,再长按住升温键或者是降温键五...
万和热水器怎么解锁 万和热水器怎么解锁1、长按锁键3秒以上,一般为5秒表示可以打开。当热水器启动工作时不可以对温度再进行...
万和热水器如何解锁 万和热水器如何解锁出现锁定的时候先不要着急,可以找出说明书仔细的查看,一般来说都有方法,或者可以直接...
多名中国公民涉案被捕,中使馆提... 近期,越南警方开展打击电诈专项行动,捣毁多个电诈窝点,有多名我公民因涉案被捕。我馆亦处理多起领保案件...
王健林,再卖一座万达广场 万达商业推进资产处置工作,有了新进展。记者获悉,湛江开发区万达广场投资有限公司于近日完成工商股权变更...
美媒曝:英国试图回欧盟参加部分... 美国彭博社7月3日报道称,随着双方试图重塑英国脱欧后的关系,英国正争取参与部分欧盟重要会议并在会上发...
18年前签的印度项目,遭拖欠上... 记者|文多编辑|何小桃 魏官红 易启江 校对|张益铭上海电气(601727.SH,股价6.96元,市...
朋友追忆西安赛格坠亡者生前细节 7月1日,西安赛格国际购物中心发生一起坠楼事件。坠楼者为陕西利和商贸有限公司负责人严某,该公司在赛格...