Comunidad de diseño web y desarrollo en internet online

Funciones anidadas en una clase

Citar            
MensajeEscrito el 24 Oct 2006 01:28 am
Saludos a todos! y de antemano gracias por la atención que me prestan, el problemilla que tengo o duda mejor dicho es el siguiente. estoy desarrollando una clase la cual manda llamar un XML y extraigo los nodos que contiene, pero he notado que en ciertas funciones anidadas Flash no les hace caso, como si no estubieran ahi, voy a ser un poco mas grafico...

Mi logica es la siguiente...


Código :

class Terrenos{
   // Declaro las propiedades de mi clase
   public var RutaXML:String = "lotes.xml"

   // Declaro las variables privadas
   private var xmlLotes:XML;

   // Declaro la funcion para cargar el XML
   private function CargarXML(){
     // Configuro mi objeto XML
      xmlLotes = new XML();
      xmlLotes.ignoreWhite();
     // Cuando se cargue el XML...
      xmlLotes.onLoad = function(exito:Boolean){
         // Si se cargo con exito...
          if(exito){
               // Obtiene la cantidad de nodos
              var numLotes:Number = xmlLotes.firstChild.ChildNodes.length;
               // Extrae cada uno de los datos
              for(var i=0;i<numLotes;i++){
                  trace(xmlLotes.firstChild.ChildNodes[i].firstChild.nodeValue);
              }
          }
      }
     // Carga el documento XML
      xmlLotes.load(RutaXML);
   }
   
   // Declaro el constructor
   function Terrenos(){
      CargarXML();
   }
}

de esta forma todo funciona bien a excepcion de cuando el documento XML se ha cargado, pues todas las funciones o sentencias que coloco dentro del for, es como si Flash no las tomara en cuenta, estube buscando por ahi y una solucion que me dio un amigo es la siguiente...

Código :

class Terrenos{
   // Declaro las propiedades de mi clase
   public var RutaXML:String = "lotes.xml"

   // Declaro las variables privadas
   private var xmlLotes:XML;

   // Declaro la funcion para cargar el XML
   private function CargarXML(){
     // Configuro mi objeto XML
      xmlLotes = new XML();
      xmlLotes.ignoreWhite();
     // Crea un objeto del mismo tipo que la clase
     var clon:Terrenos = this;
     // Cuando se cargue el XML...
      xmlLotes.onLoad = function(exito:Boolean){
         // Utilizo el clon para llamar a una funcion
         clon.ExtraerDatos(exito);
         // Elimino el clon
         delete clon;
      }
     // Carga el documento XML
      xmlLotes.load(RutaXML);
   }

   // funcion para extraer los datos
   function ExtraerDatos(exito:Boolean){
          // Si se cargo con exito...
          if(exito){
               // Obtiene la cantidad de nodos
              var numLotes:Number = xmlLotes.firstChild.ChildNodes.length;
               // Extrae cada uno de los datos
              for(var i=0;i<numLotes;i++){
                  trace(xmlLotes.firstChild.ChildNodes[i].firstChild.nodeValue);
              }
          }
     }
   
   // Declaro el constructor
   function Terrenos(){
      CargarXML();
   }
}


Como pueden ver lo que hago es crear un objeto del mismo tipo dentro de la funcion para que este llame a la funcion extraer datos, es correcto esto??, de esta forma funciona quiero aclarar, pero me interesa saber la razon por la cual no pueden ejecutarse funciones anidadas en un clase, por lo que he visto no me corren funciones anidadas mas alla de tres niveles.

Les agradesco mucho su atención y sus respuestas

Por heberto

263 de clabLevel

1 tutorial

1 ejemplo

 

Morelia, Michoacán

safari
Citar            
MensajeEscrito el 24 Oct 2006 03:50 am
Para evitar problemas del Scope, delega el onLoad a un método de la clase, y todo resuelto.

mx.utils.Delegate <- Buscar


^^

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 24 Oct 2006 03:23 pm
Muchas gracias Dano por tu respuesta, en los XML me funciona muy bien, aprobecho para preguntarte algo relacionado...
Al momento de hacer un Delegate.create es posible pasarle parametros a la funcion que estoy delegando, quiero hacer lo siguiente en la misma clase...

Código :

miMC["lote"+i].onRollOver = Delegate.create(this,MostrarNombre);

function MostrarNombre(clip:MovieClip){
    trace(clip);
}

Como puedo hacer para mandarle a la función, el clip que disparo el evento onRollOver???
y otra, Como puedo pasar parametros a una función delegada??? en concreto :)

Gracias?

Por heberto

263 de clabLevel

1 tutorial

1 ejemplo

 

Morelia, Michoacán

safari
Citar            
MensajeEscrito el 09 Ene 2011 06:12 am

Dano escribió:

Para evitar problemas del Scope, delega el onLoad a un método de la clase, y todo resuelto.

mx.utils.Delegate <- Buscar


^^


Y como harias para retornar el valor de una funcion supuestamente anidada , por ejemplo , en mi caso tengo un problema de respuesta de una funcion este es mi codigo :

//----------------------xim-O_o----------------------------------
//--------domingo enero 09 del 2011
import mx.utils.Delegate;
class conexion{
public var msn;
public var respuesta;
public var xmlX:XML;
public var xmlL;
//---------------------------
public var archivo;
public var indice;
public var valor;
public var metodo;
public var atributos;
//---------------------------
//public static var conex:conexion;
//---------------------------
public function conexion(archivo2,indice2,valor2,metodo2,atributos2){
msn = new Array();
mensaje();
respuesta = new Array();
//-----------PARAMETROS----------
indice = new Array();
valor = new Array();
atributos = new Array();
///----ASIGNANDO---
archivo = archivo2;
indice = indice2;
valor = valor2;
atributos = atributos2;
if(metodo2 = 1){metodo = "post";}else{metodo = "get";}
//-------------------------------------------
xmlX = new XML();
xmlX.ignoreWhite = true;
xmlL = new LoadVars();
if(indice.length > 0){
for(var i=0;i<indice.length;i++){
xmlL.indice[i]= valor[i];
}
}
//-------------------------------------------
xmlL.sendAndLoad(archivo,xmlX,metodo);
xmlX.onLoad= Delegate.create(this, parse);//Es como si estaria llamandose dentro y no devuelve nada
//newLoad.load("mensajes.php");
//-------------------------------------------

}//fin constructor

public function mensaje(){
msn[0] = "Error al conectar";
msn[1] = "Error al tratar de hacer la consulta";
msn[2] = "Problemas al tratar de cargar el XML";
}//fin mensaje

public function parse(success:Boolean){
if(success){
respuesta = respuestaXML();//aqui se pierden los datos cuando le asigno a "respuesta" que es una variable del Scope
}else{
trace(msn[2]);
}
//trace(respuesta);
}//fin parse

public function respuestaXML(){
//------------------------------
var respuesta2 = new Array();
var code = xmlX.firstChild.childNodes;
for(var forx=0;forx<code.length;forx++){
respuesta2[forx] = new Array();
for(var j=0;j<atributos.length;j++){
respuesta2[forx][j] = code[forx].attributes[atributos[j]];
//trace(respuesta2[forx][j]);//aqui todo esta bien y retorna datos
}
}
return respuesta2;
}//fin respuestaXML

public function getResp(){
trace(respuesta);//la prueba pasa sin exito
return respuesta;//NO RETORNA LOS DATOS
}//fin getResp
}//fin class


y asi es como lo llamo :

import conexion;

var xxI = new Array();//las variables en este caso no mando nada
var xxV = new Array();//valores de envio en este caso no mando nada
var aaT = new Array();//nodos para el XML
var resp = new Array(); // aqui capturare la respuesta

aaT[0]= "nombre";
aaT[1]= "descripcion";

conec = new conexion("xim.xml",xxI,xxV,0,aaT);
resp = conec.getResp();// No retorna nada sin existo


Donde mi XML es :

<?xml version='1.0'?>
<palaueb>
<datos nombre="Xim" descripcion="Ok" />
<datos nombre="1" descripcion="uno" />
<datos nombre="2" descripcion="dos" />
<datos nombre="3" descripcion="tres" />
<datos nombre="4" descripcion="cuatro" />
<datos nombre="5" descripcion="cinco" />
<datos nombre="6" descripcion="seis" />
<datos nombre="7" descripcion="siete" />
</palaueb>

luego lo generare con php para que sea mas dinamico pero el caso es que mi
clase no me devuelve los datos por el ambito donde se encuentra la funcion alparecer.

si alguien me pudiera ayudar le estaria agradecido .

gracias eso es todo .:?

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

opera

 

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