ActionScript 3.0函数完成事件侦听器

时间:2009-08-11 22:42:45

标签: flash actionscript-3

我如何监听功能完成?

假设我有 processFile 函数,它在Class Constructor中使用另一个事件侦听器触发。

private function processFile(e:event):void
{
//do whatever is this function suppose to do
}   

现在我想列出完成情况

当我使用

  

processFile.addEventListener(Event.Complete,   anotherCoolFunction);

我得到一个错误

  

错误:1061通过stati类型函数

可能未定义方法AddEventListener

6 个答案:

答案 0 :(得分:3)

呀......不:)

您只能侦听实现IEventDispatcher接口的对象上的事件,例如Sprite或MovieClip或EventDispatcher。

虽然您可以使用几种解决方案,但只需在调用processFile后调用下一个函数即可。当你调用一个函数时,下一行不会执行,直到它完成。所以在以下场景中:

processFile();
anotherCoolFunction();

在processFile完成之前,您可以确定anotherCoolFunction永远不会执行。

希望有所帮助。

泰勒。

答案 1 :(得分:3)

class SomeClass
{
    public function SomeClass()
    {
        this.addEventListener("fileProcessComplete", anotherCoolFunction);

        processFile();
    }

    private function processFile():void
    {
        //do whatever is this function suppose to do
        dispatchEvent(new Event("fileProcessComplete"));
    }

    private function anotherCoolFunction(evt:Event):void
    {
        //do whatever is this function suppose to do
    }
}

答案 2 :(得分:1)

使用addEventListener无法实现您的目标。函数不是EventDispatcher类的子类(提供addEventListener方法的基类)。

我没有理解你为什么要做这样的事情。如果你有一个函数并且你想知道它何时完成执行,只需在调用processFile()之后直接放置anotherCoolFunction()。

如果调用processFile()作为对事件侦听器的回调,只需将调用放在processFile()的最后一行中的anotherCoolFunction()。

答案 3 :(得分:1)

函数进程是同步的,因此函数的最后一行表示它已完成。你可以直接调用另一个函数,或者做一个dispatchEvent()(你需要扩展EventDispatcher,这就是你得到错误的原因;))。

答案 4 :(得分:1)

杰里米方法是正确的方法.. 如果你不想使用'听众'

,你也可以这样做
class SomeClass
{
    public function SomeClass() {
        var obj = this;
        this.processFile(function(){
            obj.anotherCoolFunction(this);
        });
    }
    private function processFile(method:Function):void
    {
        //do whatever is this function suppose to do

        method.apply({some_var_name: 'hello'});
    }

    private function anotherCoolFunction(data):void
    {
        //do whatever is this function suppose to do

        trace(data.some_var_name) // => 'hello'
    }
}

答案 5 :(得分:0)

我会监听函数最后一行的dispatchEvent(),因此您需要在扩展Sprite或MovieClip中创建类。在处理事件时,功能将完成。如果你从processFile函数调用另一个函数,那么它将不会完成,因为它仍然在调用堆栈上。