ed2*_*209 10 flash events event-handling actionscript-3
up.addEventListener(MouseEvent.CLICK,
function clickFunc(event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
},
false, 0, true);
down.addEventListener(MouseEvent.CLICK,
function clickFunc(event:MouseEvent):void
{
revealSpinner(event,51.42,-1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
},
false, 0, true);
Run Code Online (Sandbox Code Playgroud)
上面的代码为一些MC添加了一个监听器.最初这些方法是匿名的,但是我将它们命名为clickFunc(),以便在我的remove监听器中尝试引用它们.
这是我的删除侦听器代码.这两个片段都在不同的功能中.在remove方法之前调用add listener方法.
up.removeEventListener(MouseEvent.CLICK, clickFunc );
down.removeEventListener(MouseEvent.CLICK, clickFunc);
Run Code Online (Sandbox Code Playgroud)
我一发布这部电影就得到了这个错误:
1120: Access of undefined property clickFunc.
Run Code Online (Sandbox Code Playgroud)
首先,你有两次使用相同的名字(clickFunc),不能推断你在removeEventListener调用中引用了哪一个.其次,clickFunc只能在声明它的函数中访问:
function foo() {
var clickFunc: Function;
up.addEventListener(MouseEvent.CLICK,
clickFunc = function (event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
},
false, 0, true);
// 'clickFunc' available here, so this is possible:
up.removeEventListener(MouseEvent.CLICK, clickFunc);
}
function bar() {
// 'clickFunc' is not available here, so this is not possible:
up.removeEventListener(MouseEvent.CLICK, clickFunc);
// 1120: Access of undefined property clickFunc
}
Run Code Online (Sandbox Code Playgroud)
如果您需要引用这些方法(比如说,从事件中删除它们),它们就不能是匿名的.如果你需要从几个方法中引用它们,那么它们不应该是一个方法的本地方法(上例中的foo).他们需要不同的标识符(clickFunc1并且clickFunc2如果你愿意).这是我建议的解决方案:
private function addHandlers(): void
{
up.addEventListener(MouseEvent.CLICK, upClickHandler, false, 0, true);
down.addEventListener(MouseEvent.CLICK, downClickHandler, false, 0, true);
}
private function removeHandlers(): void
{
up.removeEventListener(MouseEvent.CLICK, upClickHandler);
down.removeEventListener(MouseEvent.CLICK, downClickHandler);
}
private function upClickHandler(event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
}
private function downClickHandler(event:MouseEvent):void
{
revealSpinner(event,51.42,-1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
}
Run Code Online (Sandbox Code Playgroud)
当然,如果在您的示例中,方法相同,则只能使用一个:
private function addHandlers(): void
{
up.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
down.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
}
private function removeHandlers(): void
{
up.removeEventListener(MouseEvent.CLICK, clickHandler);
down.removeEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(event:MouseEvent):void
{
revealSpinner(event,51.42,-1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
}
Run Code Online (Sandbox Code Playgroud)
尝试这个:
up.addEventListener(MouseEvent.CLICK,
clickFunc = function(event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
},
false, 0, true);
down.addEventListener(MouseEvent.CLICK,
clickFunc = function(event:MouseEvent):void
{
revealSpinner(event,51.42,-1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
autoTimer.stop();
},
false, 0, true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12670 次 |
| 最近记录: |