我希望有一个可重复使用的按钮,可以注册许多不同的回调之一,由外部源确定.设置新的回调时,我想删除旧回调.我还希望能够随时在外部清除回调.
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"的建议,但我不希望将该功能与回调相关联 - 例如,我可能希望能够单击该按钮两次.
建议?
我假设您在任何给定时间只需要一个回调函数.如果是这种情况那么为什么没有单个回调函数与按钮上的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类,并在其中包装所有这些.