Comunidad de diseño web y desarrollo en internet online

removeEventListener

Citar            
MensajeEscrito el 28 Jul 2011 11:04 am
Buenas, os explico mi problema a ver si me podéis ayudar:

Tengo que insertar en una base de datos SQL unos datos de mi aplicación AIR, y lo hago llamando a un web service en Glassfish. Normalmente tengo que hacer varios insert, por lo que varias llamadas al web service, ya que si lo hago todo en una sentencia separando por ";" no me lo reconoce (insert into .... ; insert into ....; insert into ....;).

Si controlo que solo se asigne un listener, sólo me hace un insert. Si asigno un listener para cada llamada, la segunda vez que haga un lote de llamadas me acumula las llamadas anteriores (primero hago 2 llamadas y todo bien. Luego hago otras 2 llamadas y me hace estas 2 y las 2 primeras...).
He probado con e.currentTarget.removeEventListener(ResultEvent.RESULT,MiFuncion), pero no me los elimina.

¿Alguna idea?

Código ActionScript :

var arr:ArrayCollection=new ArrayCollection();

for each(var s:String in array_cadena){
   for each(var r:Object in array_objetos){
      if(s==r._nombre){
         arr.addItem(r);   
         Consulta.token=WebService1.Consulta("Consulta select");
         Consulta.addEventListener(ResultEvent.RESULT,MiFuncion=function (e:Event):void{
                           Funcionresult(e,arr);
                        });                        
      }
   }
}      
         
protected function Funcionresult(e:Event,r:ArrayCollection):void{
   e.currentTarget.removeEventListener(ResultEvent.RESULT,MiFuncion);

   var id:String=Consulta.lastResult
   Insertar.token=WebService1.Insertar("Insert into...);
   .
   .
   .
}

Por Reed

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Jul 2011 11:26 am
Cuando escribes la funcion dentro del listener como funcion anonima, su alcance es limitado (scope).
Debes hacer tu funcion fuera del listener para poder acceder a ella.

Código ActionScript :

 Consulta.addEventListener(ResultEvent.RESULT, Funcionresult);  

Claro, deberas jugar con lo que te he dicho porque tienes dos parametros en tu funcion Funcionresult (porque comienza con mayuscula?).

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 28 Jul 2011 12:52 pm
Gracias por contestar.

La función la saqué para que no fuera anonymous, tal como me dijíste, pero igualmente no me iba bien.
Así que me he echado una partida al LOL para despejar la mente, lo he enfocado de otra manera et voilà. Ya solo añado un event listener y sin necesidad de funciones anónimas.
En esencia: he declarado el ArrayCollection fuera de la función para recorrerlo en otra función distinta y hacer las peticiones al web service.

No me gusta declarar variables que solo se usan en una función fuera de éstas, pero "a falta de parámetros, buenas son globales"

Un saludo, gracias ;)

PD: La función empieza por mayúscula por "la manía" de escribir correctamente en foros jeje.

Por Reed

11 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.