Comunidad de diseño web y desarrollo en internet online

Problema al cargar Hint de descripcion desde XML

Citar            
MensajeEscrito el 27 Oct 2005 08:38 pm
Saludos:

Tengo un problema, quiciera poder asignar masivamente en el evento al presionar un boton que cargue de un XML la descripcion referente a un determinado boton y lo muestre en un objeto de tipo texto, aca coloco el código, donde podría estár el error?:



Código :

for(var i=1;i<=2;i++){
 _root["local"+i].onPress=function(){
   var mixml:XML=new XML();
   mixml.load("locales.xml");
   mixml.ignoreWhite=true;
   mixml.onLoad=carga;
   function carga(){
     total= mixml.firstChild.childNodes.length -1;
     for(i=0;i<=total;i++){
       if (mixml.firstChild.childNodes[i].attributes.nombre == _root["local"+i].name)
       _root.descripcion.text = mixml.firstChild.childNodes[i].attributes.descripcion;
     }
   }
  }
}


donde mi XML es:

Código :

<locales>
<local nombre="local1" descripcion="Esto es el local1"></local>
<local nombre="local2" descripcion="Esto es el local2"></local>
</locales>


Gracias de antemano... :shock: :shock: :shock:

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Oct 2005 09:04 pm
1. Utilizas la misma variable i en los dos "for".
2. Y necesariamente necesitas ese for externo?.
3. Podrías poner un trace luego de onPress para ver si te sale algo en el outPanel, para ver si las rutas están bien.

Por scx7

336 de clabLevel

2 tutoriales

Genero:Masculino  

Ecuador - Santo Domingo

firefox
Citar            
MensajeEscrito el 28 Oct 2005 01:13 am
Bueno aqui esta una respuesta:
Pero para que funcione ustedes deben poner un boton (se encuentra en UI Components) y dar le el nombre de submit_btn. Aqui esta el codigo, estoy creo que es lo que estan buscando:

import mx.controls.Button;
var a:Number = 1;
submit_btn.onPress = function() {
a = 1;
var myLoadedXML:XML = new XML();
// set the ignoreWhite property to true (default value is false)
myLoadedXML.ignoreWhite = true;
// After loading is complete, trace the XML object
myLoadedXML.onLoad = function(success) {
// View all the XML loaded by the script
// trace(myLoadedXML);
total = myLoadedXML.firstChild.childNodes.length-1;
for (i=0; i<=total; i++) {
nombre = myLoadedXML.firstChild.childNodes[i].attributes.nombre;
descripcion = myLoadedXML.firstChild.childNodes[i].attributes.descripcion;
// View XML Attributes
// trace(nombre+" "+descripcion);
createClassObject(Button, nombre, i, {label:descripcion});
}
locateButtons();
};
myLoadedXML.load("xmldoc.xml");
};
function locateButtons() {
for (var x in this) {
if (this[x] instanceof mx.controls.Button) {
// trace(this[x]._name);
if (this[x]._name<>'submit_btn') {
this[x]._y = 30*a;
this[x]._x = 18.0;
a = a+1;
}
}
}
}

Por Christopher_Rivera

6 de clabLevel



Genero:Masculino  

Cingular Wireless

msie
Citar            
MensajeEscrito el 28 Oct 2005 01:50 am
1. Utilizas la misma variable i en los dos "for".


Ya le puse "j".

2. Y necesariamente necesitas ese for externo?.


Si, ya que es la unica manera que encuentro para asignarle dinamicamente a todos los botones _root["local"+i] el evento onPress

3. Podrías poner un trace luego de onPress para ver si te sale algo en el outPanel, para ver si las rutas están bien.


Ya lo hice y tampoco

el codigo segun las correcciones que me diste es este:

Código :

for(var i=1;i<=2;i++){
 _root["local"+i].onPress=function(){
   var mixml:XML=new XML();
   mixml.load("locales.xml");
   mixml.ignoreWhite=true;
   mixml.onLoad=carga;
   function carga(){
     total= mixml.firstChild.childNodes.length - 1;
     for(j=0;j<=total;j++){
       if (mixml.firstChild.childNodes[j].attributes.nombre == _root["local"+i]._name)
       _root.descripcion.text = mixml.firstChild.childNodes[j].attributes.descripcion;
      trace (_root["local"+i]._name);
     }
   }
  }
}


Por cierto cuando marco " trace (_root["local"+i]._name);", me dice valor indefinido, pero si local1 y local2 son dos botones que estan alli. no comprendo, creo que ese es el error pero no logro dar con la solucion

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 02:06 am
Christopher_Rivera, tu respuesta me guindo el flash (quizas porque no se donde esta ese boton que dices), ademas lo que quiero es arrojar infinidades de botones con una especie de hint automatico que cargue del xml.

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 02:57 am
aqui te mando la pagina endonde esta todo lo que necesitas:

http://www.riverach.com/projects/xmlLoader.cfm

Por Christopher_Rivera

6 de clabLevel



Genero:Masculino  

Cingular Wireless

msie
Citar            
MensajeEscrito el 28 Oct 2005 01:37 pm
Explicación del código:

Antes que nada, gracias por las respuestas que ya me han dado unque no he logrado dar con la solución del problema. Lo que intento hacer es crear N cantidad de botones llamados local1, local2,local3,...localn, y que automáticamente con el código de abajo se le genere a cada uno un evento OnPress que al dar click
muestre la descripción de dicho boton. Esto lo utilizare para hacer un mapa virtual en donde cuando me posicione encima de un local (el boton) este me muestre debajo una descripción...

Otra cosa, es que para que el código de abajo funcione se deben crear 2 botones con nombres local1 y local2 respectivamente para hacerlo más sencillo, pero la idea es crear N número de botones...



Código :

n = 2;
// Total Botones Localn es el número de nodos del XML, 
// que basicamente viene siendo 
// igual al "total" de abajo, podria mejorarse eso

for(var i=1;i<=n;i++){
// Este ciclo For lo que hace es asignar el evento OnPress a cada uno
// de los botones local1,local2,local3,...localn

  _root["local"+i].onPress=function(){
  // _root["local"+i] es una llamada a el Boton local*, donde * es igual a Total Locales

   var mixml:XML=new XML();
   //Creación del Objeto XML
   mixml.load("locales.xml");
   mixml.ignoreWhite=true;
   mixml.onLoad=carga;


   function carga(){
     total= mixml.firstChild.childNodes.length - 1;
     for(j=0;j<=total;j++){
       
       // Quizas la parte mas importante del código, que quiere decir lo siguiente,
       // Si el nombre del localn es igual al nodo del xml, entonces muestra una descripción
       // del botón
       if (mixml.firstChild.childNodes[j].attributes.nombre == _root["local"+i]._name)
       _root.descripcion.text = mixml.firstChild.childNodes[j].attributes.descripcion;

      //Esta línea es para probar de que no sirve,y realmente al parecer es el único
      //error del código ya que no encuentra el nombre del objeto
      // Ahora bien si coloco local1._name o local2._name, por ejemplo, el código
      // si logra funcionar bien
      trace (_root["local"+i]._name); 
     }
   }
  }
}



Archivo XML de donde se cargan las descripciones de los botones local1,local2,local3....localn:

locales.xml:

Código :

<locales>
<local nombre="local1" descripcion="Esto es el local1"></local>
<local nombre="local2" descripcion="Esto es el local2"></local>
</locales>

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 01:51 pm
Si usas la variable "i" dentro el evento onPress, esa tendrá el último valor que tenía en el bucle y no te servirá. Antes del onPress, escribe

Código :

_root["local"+i].valor=i;

y dentro del evento

Código :

 if (mixml.firstChild.childNodes[j].attributes.nombre == _root["local"+this.valor]._name) 
....

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 28 Oct 2005 01:59 pm

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 02:04 pm
Gracias Zah, pero intenta correr el código para que veas que realmente no me sirve, por otro lado:

Cuando me dices que coloque:

_root["local"+this.valor]

this vendria siendo _root y no el boton en si ya que este código se genera en caliente, es decir aun this no es this en el OnPress del boton "CREO"

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 02:09 pm
El resultado del trace de ambos botones, Local1 y local2 que comente arriba que se deben colocar para que el código funcione arroja


Código :

undefined
undefined


Cada uno :( :crap: :shock:

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 02:12 pm
Ahora bien si coloco debajo de

Código :

trace (_root["local"+i]._name);
trace ("local"+i); // <<-- Esto



El trace, para cada uno de los clips de los botones, me arroja:

Código :

undefined
local3
undefined
local3


allí debe estar el problema en la variable bandera, pero donde estara?.

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 02:19 pm
Zah, cuando dices:

Si usas la variable "i" dentro el evento onPress, esa tendrá el último valor que tenía en el bucle y no te servirá. Antes del onPress, escribe




Tienes razón, el valor que toma es 3 al final, de hecho el último post que realice antes de este lo explica, pero la solución que planteas no funciona :(

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 02:40 pm
Le agregue algo al código en la parte superior ya que sino lo haría un bucle infinito (algo que descrubri), esto fue lo que le agregue:

Código :

_root.onLoad= function () {


Quedando de la siguiente forma:

Código :

_root.onLoad= function () {
n = 2;
// Total Botones Localn es el número de nodos del XML,
// que basicamente viene siendo
// igual al "total" de abajo, podria mejorarse eso
for(var i=1;i<=n;i++){
   _root["local"+i].valor=i;
   trace (i);
// Este ciclo For lo que hace es asignar el evento OnPress a cada uno
// de los botones local1,local2,local3,...localn
  _root["local"+i].onPress=function(){
  // _root["local"+i] es una llamada a el Boton local*, donde * es igual a Total Locales

   var mixml:XML=new XML();
   //Creación del Objeto XML
   mixml.load("locales.xml");
   mixml.ignoreWhite=true;
   mixml.onLoad=carga;


   function carga(){
     total= mixml.firstChild.childNodes.length - 1;
     for(j=0;j<=total;j++){
       // Quizas la parte mas importante del código, que quiere decir lo siguiente,
       // Si el nombre del localn es igual al nodo del xml, entonces muestra una descripción
       // del botón
       if (mixml.firstChild.childNodes[j].attributes.nombre == _root["local"+this.valor]._name)
       _root.descripcion.text = mixml.firstChild.childNodes[j].attributes.descripcion;

      //Esta línea es para probar de que no sirve,y realmente al parecer es el único
      //error del código ya que no encuentra el nombre del objeto
      // Ahora bien si coloco local1._name o local2._name, por ejemplo, el código
      // si logra funcionar bien
      trace (_root["local"+this.valor]._name);
     trace (this.valor);
     
     }
   }
  } 
}
}


El trace me arroja:

Código :

1
2


y no

Código :

local1
1
local2
2
Como debería ser

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 03:37 pm

Código :

// Esta parte localiza toda los botones que existe
for (var x in this) {
   if (this[x] instanceof mx.controls.Button) {
      this[x].onPress = function() {
         var mixml:XML = new XML();
         mixml.load("xmldoc.xml");
         mixml.ignoreWhite = true;
         mixml.onLoad = carga;
         // Habia que crear un variable global para que el nombre del boton pasara de un funcion a otra.
         var butName:String = this._name;
         function carga() {
            total = mixml.firstChild.childNodes.length-1;
            for (j=0; j<=total; j++) {
               if (mixml.firstChild.childNodes[j].attributes.nombre == butName) {
                  _root.descripcion.text = mixml.firstChild.childNodes[j].attributes.descripcion;
               }
            }
         }
      };
   }
}

Por Christopher_Rivera

6 de clabLevel



Genero:Masculino  

Cingular Wireless

msie
Citar            
MensajeEscrito el 28 Oct 2005 04:13 pm

Por Christopher_Rivera

6 de clabLevel



Genero:Masculino  

Cingular Wireless

msie
Citar            
MensajeEscrito el 28 Oct 2005 05:43 pm
Gracias Christopher_Rivera, realmente no se como diste con la solucion, estoy examinando tu código parece funcionar mejor inclusive mejor de lo que pense. Gracias, voy a realizar pruebas, por los momentos todo parece estar bien..

Gracias denuevo: ^^ :P

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Oct 2005 05:53 pm

wilfredor escribió:

Gracias Christopher_Rivera, realmente no se como diste con la solucion, estoy examinando tu código parece funcionar mejor inclusive mejor de lo que pense. Gracias, voy a realizar pruebas, por los momentos todo parece estar bien..

Gracias denuevo: ^^ :P


No ahi problema...

Por Christopher_Rivera

6 de clabLevel



Genero:Masculino  

Cingular Wireless

msie
Citar            
MensajeEscrito el 28 Oct 2005 08:13 pm

Por wilfredor

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Oct 2005 12:25 am

Por Christopher_Rivera

6 de clabLevel



Genero:Masculino  



Ultima edición por Christopher_Rivera el 29 Oct 2005 01:47 pm, editado 1 vez

Cingular Wireless

msie
Citar            
MensajeEscrito el 29 Oct 2005 01:29 pm
Saludos Cristopher, disculpa, podrías decirme cual es la ip o dominio de tu localhost, ya que intente con:

http://www.riverach.com/projects/riverach_com/www/projects/tooltip%20from%20XML/newXML.html

y no es :(

Por wilfredor

10 de clabLevel



 

firefox

 

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