0

我开发了自己的方式来完成这个简单的任务。但是,我现在想知道是否有更好的方法来做到这一点。

按钮:

var menuBtnEscrit:MovieClip = new MovieClip();
var mbe:btnEscritorio = new btnEscritorio();
menuBtnEscrit.addChild(mbe);
menuBtnEscrit.val = "escrit";
menuBtnEscrit.x = 80;
menuBtnEscrit.addEventListener(MouseEvent.CLICK, novoCont);
dMenu.addChild(menuBtnEscrit);
var menuBtnPublic:MovieClip = new MovieClip();
var mbp:btnPublic = new btnPublic();
menuBtnPublic.addChild(mbp);
menuBtnPublic.val = "public";
menuBtnPublic.x = 244;
menuBtnPublic.addEventListener(MouseEvent.CLICK, novoCont);
dMenu.addChild(menuBtnPublic);

我可以继续前进,或者通过一些算法创建按钮,并放置更多属性并利用 MovieClip。

处理程序:

private function novoCont(e=null){
  if(e!=null) selecCont = new String(e.target.parent.val);
  clearDisplay(dSubMenu);
  clearDisplay(dConteudo);
  var func:String = "cont_"+selecCont;
  this[func]();
}

如您所见,所有按钮都有一些共同的任务。

如果我单击第一个按钮,它将调用 cont_escrit() 函数。这种机制有效,但这是最佳实践吗?有没有办法优化它?

4

1 回答 1

1
public class BaseButton extends Button {

   private var _func:Function;

   public function get handler():Function {
        return _func;
   }

   public function set handler(value:Function):void {
       _func = value;
   }

}

所以英雄你可以像这样创建mbe

 mbe  = new BaseButton ();
 mbe.hanler = cont_escrit;

事件处理程序将是

private function novoCont(e=null){
    if(e!=null) {

        var  selecContent:BaseButton  = e.targe as BaseButton ;

       var handler:Function = selecContent.handler;
       handler();
     }
}

这是一个例子。

var menuBtnEscrit:MovieClip = new MovieClip();
var mbe:btnEscritorio = new btnEscritorio();
menuBtnEscrit.addChild(mbe);
//menuBtnEscrit.val = "escrit";
menuBtnEscrit.func = this.cont_escrit;
menuBtnEscrit.x = 80;
menuBtnEscrit.addEventListener(MouseEvent.CLICK, novoCont);


private function novoCont(e=null){

   if(e!=null) {
       var mc:MovieClip = e.target  as MovieClip;
       var func:Function = mc.func;
       func();
   }
  clearDisplay(dSubMenu);
  clearDisplay(dConteudo);

}
于 2013-06-11T04:19:00.243 回答