2011-05-20 18 views
0

我是一個新的Flash AS3工作,但當我需要事件監聽器代碼時,使用某些OOP概念(如方法返回)時遇到了一個大問題。問題是Event Listener中的函數無法返回值。我該如何解決這個問題?這是我在AIR應用程序上使用的代碼示例。這個代碼我想在其他需要解析目錄文件的情況下重用。在AS3中加入ruturn的addEventListener - 如何?

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

如果我正確理解你的問題,你想傳遞額外的參數以及一個調度事件?這是flash/air的常見問題,這意味着您需要創建自定義事件並使用額外的參數進行擴展。

我發佈了一篇文章,不久之前詳細介紹瞭如何在此處執行此操作:"how to implement custom events"

主要思想是在調度事件時在方法sig的末尾傳遞參數,並在接收端將其作爲數組選取。

希望幫助其他它不是OOP的內部

+0

感謝您的回覆類,但它沒有。我想要一個方法將DIRECTORY_LISTING事件與結果同步,以便稍後使用該信息。如果我跟蹤事件的結果,我收到空,如果它沒有完成。我怎麼能告訴其他方法,這是完整的沒有返回? – Marcos 2011-05-20 18:16:05

1

好第一關從來沒有一個嵌套函數。

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); 
} 
+0

+1不嵌套函數 – Bosworth99 2011-05-21 00:49:40

+0

嗯,雖然嵌套函數可以使代碼難以閱讀;我不同意這種說法,認爲這不是OOP ... – JonnyReeves 2011-05-21 08:58:22

+0

他應該說,「它不是一個好的面向對象的做法」,這是事實,因爲事實並非如此。 – Taurayi 2011-05-22 15:30:09