有没有办法从对象中删除未知的事件侦听器?

6 actionscript-3

我希望有一个可重复使用的按钮,可以注册许多不同的回调之一,由外部源确定.设置新的回调时,我想删除旧回调.我还希望能够随时在外部清除回调.

public function registerButtonCallback(function:Function):void
{
  clearButtonCallback();

  button.addEventListener(MouseEvent.CLICK, function, false, 0, true);
}

public function clearButtonCallback():void
{
  if (button.hasEventListener(MouseEvent.CLICK) == true)
  {
    // do something to remove that listener
  }
}
Run Code Online (Sandbox Code Playgroud)

我在这里看到了在回调中使用"arguments.callee"的建议,但我不希望将该功能与回调相关联 - 例如,我可能希望能够单击该按钮两次.

建议?

Sim*_*mon 8

我假设您在任何给定时间只需要一个回调函数.如果是这种情况那么为什么没有单个回调函数与按钮上的click事件相关联,该按钮本身称为函数并且具有该函数可设置...

<mx:Button click="doCallback()" .../>

public var onClickFunction:Function = null;
private function doCallback():void
{
    if (onClickFunction != null)
    {
        onClickFunction(); // optionally you can pass some parameters in here if you match the signature of your callback
    }
}
Run Code Online (Sandbox Code Playgroud)

您的控件的消费者包含您的按钮将使用适当的函数设置onClickFunction.事实上,您可以根据需要随时设置它.

如果你想更进一步,你可以继承AS3 Button类,并在其中包装所有这些.