我是一个新的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!?!?!
}
}
答案 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);
}