在AS3中使用ruturn的addEventListener - 如何?

时间:2011-05-20 14:53:59

标签: actionscript-3 air adobe return addeventlistener

我是一个新的Flash AS3工作,但是当我需要一个事件监听器代码时,我在使用一些OOP概念时遇到了一个大问题,例如从方法返回。问题是来自Event Listener的函数无法返回值。我该如何处理这个问题?这是我在AIR应用程序中使用的代码示例。这段代码我想在其他我要解析目录文件的情况下重用。

private function initApp():void
{
    try
    {
        // Seta o diretoório de molduras
        var directory = diretorio_mestre.resolvePath("molduras/animacao");
        directory.getDirectoryListingAsync();
        directory.addEventListener(FileListEvent.DIRECTORY_LISTING, listaHandler);

    }
    catch (erro:ReferenceError)
    {
        mostraMensagem("Problemas com a listagem do diretório.", erro.errorID);

    }

    // Percorre arquivos
    function listaHandler(evento):void
    {
        // Contador
        var i:int = 0;

        // Conteúdo
        var contents = evento.files;

        for (i = 0; i < contents.length; i++) 
        {
            var nome:String = contents[i].name;
            var nome_array:Array = new Array();
            nome_array = nome.split("_");

            // Formata para ordenar
            arquivos_animacao.push ( { nome:contents[i].name, tamanho:contents[i].size, ordem:nome_array[0] } );

        }

        // Ordena para a ordem de númeração
        arquivos_animacao.sortOn("ordem", Array.NUMERIC);

        // Continua o processo
        // How can I return!?!?!

    }

}

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你想传递额外的参数和调度事件吗?这是flash / air的常见问题,它只是意味着您需要创建自定义事件并使用额外参数对其进行扩展。

我不久前发了一篇文章,详细说明了如何在此处执行此操作:"how to implement custom events"

主要思想是在调度事件时在方法sig的末尾传递参数,并在接收端将它们作为数组拾取。

希望有所帮助

答案 1 :(得分:1)

好的,首先,永远不要将一个功能嵌入另一个功能中,这不是OOP。

private function initApp():void{
  try{
    //Seta o diretoório de molduras
    var directory = diretorio_mestre.resolvePath("molduras/animacao");
    directory.getDirectoryListingAsync();
    directory.addEventListener(FileListEvent.DIRECTORY_LISTING, listaHandler);
  }catch(erro:ReferenceError){
    mostraMensagem("Problemas com a listagem do diretório.", erro.errorID);
  }
}


private function listaHandler(evento):void{
  var contents = evento.files;
  for (var i:int = 0; i < contents.length; i++) {
    var nome:String = contents[i].name;
    var nome_array:Array = new Array();
    nome_array = nome.split("_");
    arquivos_animacao.push ({nome:contents[i].name, tamanho:contents[i].size, ordem:nome_array[0]});
  }
  arquivos_animacao.sortOn("ordem", Array.NUMERIC);
  this.dispatchEvent( new Event("GOTRESULTS") );
}

现在你在哪里实例化了这个类,你只需要听GOTRESULTS事件

var myClass:whatEverYouNamedIT = new whatEverYouNamedIT( );
myClass.addEventListener( "GOTRESULTS", gotResults )

function gotResults( e:Event ):void{
  trace(myClass.arquivos_animacao);
}