2005-12-04

Delegate class委派类的应用

来源: 本站收集整理 作者:佚名 评论 0 条
 

注重:我们需要先导入delegate 类,位于mx.utils.Delegate,当需要指定事件句柄时,我们创建一个Delegate,指定范围和最终的事件句柄。Delegate类只是声明一个静态的对象,create,类似如下创建过程:
代码:

static function create(obj:Object, func:Function):Function


上面的代码中的obj是你想要指定给func函数的范围。假如你想要移除事件侦听,也是非常简单:如下:
代码:

import mx.utils.Delegate;
var md = Delegate.create(this, someFunction);
myBtn.addEventListener('click',md);
//其它动作
//然后移除
myBtn.removeEventListener('click',md);


如你所看到的,Delegate.create给你一个非常好和简单的方法来处理组件的事件。引用jess warden的话说:使用Delegate 可以使你变得更聪明!

Delegate也可以工作在除了组件之外的低级别事件中,例如,你可以使用movieclip’s onEnterFrame事件或一个xml对象的onLoad事件,如下:
代码:

import mx.utils.Delegate;

function xmlLoaded(success)
{
trace(this);
trace(success);
}

function handleEnterFrame()
{
trace(this);
trace(getTimer());
}

var myXML = new XML();
myXML.onLoad = Delegate.create(this, xmlLoaded);
myXML.load(“some.xml”);

//myMc为当前帧上一个影片剪辑
myMC.onEnterFrame = Delegate.create(this, handleEnterFrame);


通过使用Delegate结合低级别事件它可以让你很轻松的解决在调用中的范围问题,这意味着可以大量的减少使用_root.

另一个使用Delegate的技巧方法是与setInterval结合使用。中心是当在间隔一定时间不断调用函数时,范围有些时候不会被一直传递,因些trace(this);会显示为undefined.,你可以使用下面的代码方法解决这个问题。
代码:

import mx.utils.Delegate;

function traceThis()
{
trace(this);
}

var myInt = setInterval(Delegate.create(this, traceThis), 1000);



它可以工作的很好,不管是在时间线上还在类的内部,意味着你不必使用原有setInterval的类型为string的第二调用,假如不理解请参看FLASH帮助。它是非常好的,因为原有的setinterval在实际应用中显得不是很可靠,而第一调用是不可动摇的。另外,第一调用可以被编译器检查因为它是对函数的引用而不是针对string字符串。
共3页: 上一页 [1] 2 [3] 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:Web2.0在企业中找到新空间 低谷之际需群体应战  
下一篇:FLASHMX2004-平铺底纹
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号