用户名: 密码: 验证码: QQ--程序群:31736530 动画群:38836599
闪无忧
 
首 页 业界新闻 业界杂谈 Flash教程 Flash源码 Flash图书 Flash酷站 Flex & AIR 供求信息
   本栏目通告:   有意向写收费精品教程的朋友,请联系本站合作
当前位置 :首页>flash教程>Flash as3.0教程>列表

flash as3的binding-ObjectProxy

[来源:roading.net | 作者:roading | 时间:2008-06-23 | 点击:  | 收藏本文  【 】]
在flex里面可以用到一个特性【binding】,可惜在flash中没有提供这个功能。看了一下flex的binding包,又很复杂,那么,在flash中怎么使用这个功能呢?

其实在as2的时候,可以使用Oject.watch很方便的实现代理的功能,可惜到as3的时候,这个方法被去掉了。不过,在as3中多了proxy。通过在proxy也可以实现binding的功能。

下面是源代码以及使用方法:

/**
* ...
* @author roading
* @link http://roading.net
* @version 0.13
*
*
* 使用方法:
 import net.roading.proxy.ObjectProxy;

 var o = {};
 o.hi = function(name,age)
 {
  trace('hi ',name,'!',age);
 }
 //
 var op:ObjectProxy = new ObjectProxy(o);
 var obj:Object = {};
 //
 op.bind(obj,'x');
 op.bindFun(fun,'hi');
 //
 op.hi('rod',23);
 op.x = 2;
 trace(op.x);
 trace(obj.x);
 //

 function fun(v,v1)
 {
  trace('call==',v,v1);
 }
*/

package net.roading.proxy
{
 import flash.utils.Proxy;
 import flash.utils.flash_proxy;
 /**
  * ObjectProxy:实现object和任何对象的绑定,通过代理之后的对象可以和任何对象绑定
  */
 public dynamic class ObjectProxy extends Proxy
 {
  /**
   * 需要绑定的实例
   */
  private var _item:*;
  /**
   * 绑定的属性集合
   */
  protected var _bindings:Array = [];
  /**
   * 绑定的方法集合
   */
  protected var _bindingFuns:Array = [];
  /**
   * ...
   * @param com 要实现的对象
   */
  public function ObjectProxy(com:*)
  {
   _item = com;
  }
  /**
   * 绑定一个对象,注意:要绑定的对象的属性或者方法应该一致,由于参数无法获取动态长度
   * @param o 要绑定的对象
   * @param pro 要绑定对象的属性(方法)
   * @param t 当前对象的属性(方法)
   */
  public function bind(o:Object,pro:String,t:String=null)
  {
   if(t==null)t=pro;
   _bindings.push({o:o,pro:pro,t:t});
  }
  public function bindFun(fun:Function,t:String)
  {
   //if(t==null)t=pro;
   _bindingFuns.push({fun:fun,t:t});
  }
  /**
   * 解除绑定 , 必须三个条件都符合
   * @param o 要绑定的对象
   * @param pro 要绑定对象的属性(方法)
   * @param t 当前对象的属性(方法)
   */
  public function unBind(o:Object,pro:String,t:String=null)
  {
   if(t==null)t=pro;
   for(var i=0;i<_bindings.length;i++)
   {
    if(_bindings[o] == o&&_bindings[pro] == pro&&_bindings[t] == t)
    {
     return _bindings.splice(i,1);
    }
   }
   return null;
  }

  /**
   * 执行方法 ,同时执行绑定的方法
   * @param methodName 执行的函数名字
   * @param ... args 参数
   * @return 执行函数的返回值
   */
  override flash_proxy function callProperty(methodName:*, ... args):*
  {
   var res = _item[methodName].apply(_item, args);
   //
   for(var i in _bindings)
   {
    if(_bindings[i].t == methodName)
    {
     _bindings[i].o[_bindings[i].pro].apply(_bindings[i].o, args);
    }
   }
   for(var j in _bindingFuns)
   {
    if(_bindingFuns[j].t == methodName)
    {
     _bindingFuns[j].fun.apply(_item, args);
    }
   }
   //
   return res;
  }
  /**
   * 获取属性
   * @param name 属性名字
   * @return 属性值
   */
  override flash_proxy function getProperty(name:*):*
  {
   return _item[name];
  }
  /**
   * 设置属性 同时执行绑定的属性设置
   * @param name 属性的名字
   * @param value 属性值
   */
  override flash_proxy function setProperty(name:*, value:*):void
  {
   _item[name] = value;
   for(var i in _bindings)
   {
    if(_bindings[i].t == name)
    {
     _bindings[i].o[_bindings[i].pro] = value;
    }
   }
   for(var j in _bindingFuns)
   {
    if(_bindingFuns[j].t == name)
    {
     _bindingFuns[j].fun(value);
    }
   }
   
  }
  

  
 }
}
文章如果有错误或者缺少文件,请发邮件提交给我们
上一篇:as3的ComboBox组件应用小问题
下一篇:AS3编码转换函数
Tags:    
>>> 最新评论:(共有 0 位网友发表了评论)      查看所有评论
  发表评论
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
  教程分类
  基础操作   动画特效
  应用开发   组件学习
  As程序   动画教程
  Flash cs3   AS 3.0
  FCS/FMS教程   Loading教程
  Flash与Web   Flash教程连载
  相关文章
·flash【.swf?id=】很简单的获取
·AS3.0 单一职责原则设计模式
·as3打造一个非常酷的莲花曲线效
·AS3制作MP3波形图
·AS3的网页参数处理
·flash地图游戏说明如何结合AS3.0
·2/8/10/16/32进制AS3自带函数进
·as3实现点击图片取色
·flash as3+php上传源文件下载
·TransformManager (AS3) - Inter
  热门文章
·Flash进度条的制作详细讲解(组图)
·flash幻灯片网页效果
·Flex 3 AdvancedDataGrid的使用(第二
·全Flash动画网站实现的基础教学
·flash水影效果字
·Flash打造简单的飘雪动画视觉特效
·FLASH+XML相册(附源码)
·超酷flash光晕移动效果
·Flash旋转拖尾文字效果的制作教程
·Flash制作大雪纷飞效果动画
·flash春雷闪电效果
关于我们 - 免责声明 - 网站地图 - 商务服务 - 联系我们 - RSS地图
©CopyRight 2006-2008, 5UFlash.COM, Inc. All Rights Reserved
鲁ICP备06034971号