Comunidad de diseño web y desarrollo en internet online

Ayuda, principiante muy frustrado....

Citar            
MensajeEscrito el 19 Sep 2006 12:20 pm
Hola, tengo poquito tiempo aprendiendo actionscript y la verdad se me ha dificultado muchisisisimas veces mas que el php, siendo que actionscript se supone que deberia de ser mas facil por ser orientado a diseñadores.

Bueno, mi problema es el siguiente, que por cierto ya me tiene hasta la mother, porque he intentado todo lo que se me ha ocurrido, hasta he estado llegando al punto en el que estoy odiando a actionscript. :twisted:

Bueno aqui esta el codigo, lo que quiero hacer es un programita que carga datos como url y tiempo en segundos para un rotador de banners, anuncios etc. Esos datos los cargara de un archivo xml.

Esta es mi clase en la que quisiera guardar los datos del xml que necesito, en variables.

Código :

class objectxml {
   private var docXML:XML;
   public var crapo:String;
    function objectxml(queXML, queObj) {
       var crap:String;
      docXML = new XML();
      docXML.ignoreWhite = true;
      docXML.load(queXML);
      docXML.onLoad = function() {
                    crap = this.firstChild.firstChild.childNodes[1];
                    if (!(crap)) {
            crap = "mensaje de prueba";
            } else {
            setCrap(crap);}
      } 
              function setCrap (param:String):Void {
             crapo = param;
             trace(param);
               }
       }
}


y la del .fla principal:


var carga:objectxml = new objectxml("banner.xml", datos_obj);
trace (carga.crapo);


Es asi de sencillo, pero parece ser algo imposible en actionscript. En php solo tendria que poner $this->crapo = $crap; y listo. Pero aqui, ya busque por todos lados y se pone necio el actionscript. :twisted:

Bueno ya basta de criticar el actionscript, soy principiante y lo acepto. Algo estoy haciendo mal, tal vez llevo 99 cosas que he probado y me falta la 100 para lograrlo, solo que nomas no se me ocurre como pueda ser la 100. Porque es tan dificil es asignarle una variable a una propiedad de un objeto desde una funcion? :?

Agradeceria mucho cualquier ayuda que me puedan dar. ^^

Por FLaKes

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Sep 2006 01:09 am
Uno de los problemas que tienes es que la funcion setCrap() define una variable crapo que no es la misma variable crapo de la clase... ya que el this dentro del onLoad() hace referencia al contenido de la carga y no a la clase que lo contiene... si no te ha quedado claro pon un trace(this) dentro y fuera del onLoad():

Código :

   function objectxml(queXML, queObj) {
      ....
      trace(this);
      docXML.onLoad = function(success:Boolean) {
         .....
         trace(this);
   }

el primero te sacará [object Object] (o sea la clase)
y el otro el contenido del xml...

Esto lo solucionas pasandole una referencia de la clase dentro de la funcion:

Código :

   function objectxml(queXML, queObj) {
      ....
      var scope = this;
      trace(scope);
      docXML.onLoad = function(success:Boolean) {
         .....
         trace(scope);
   }

los dos traces te devuelven referencia a la clase ;)

y defines la variable asi:

Código :

scope.crapo = this.firstChild.firstChild.childNodes[1];


otro tema que te falla es que el trace de:
var carga:objectxml = new objectxml("banner.xml", datos_obj);
trace (carga.crapo);

se te va a leer antes de que el xml este cargado y siempre te dará undefined...
eso lo solucionas no haciendo el trace hasta que la carga no se haya realizado completa:

Código :

class objectxml {
   private var docXML:XML;
   public var crapo:String;
   public var cargado:Boolean;
   //----------------------------------
   function objectxml(queXML, queObj) {
      var scope = this;
      cargado = false;
      docXML = new XML();
      docXML.ignoreWhite = true;
      docXML.load(queXML);
      docXML.onLoad = function(success:Boolean) {
         if (success) {
            scope.crapo = this.firstChild.firstChild.childNodes[1];
            scope.cargado = true;
         }
      };
   }
}

Código :

var carga:objectxml = new objectxml("banner.xml", datos_obj);
this.onEnterFrame = function() {
   if (carga.cargado == true) {
      trace(carga.crapo);
      delete this.onEnterFrame;
      play();
   } else {
      stop();
   }
};

:wink:

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 25 Sep 2006 05:58 pm
:D Muchisimas gracias, de verdad te felicito, jamas habia encontrado una solucion tan bien explicada como la que me diste. Se noto que te tomaste tu tiempo y de verdad te agradezco muchisimo, ya que le entendi muy bien y me quedo muy claro. ^^

Por FLaKes

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Sep 2006 06:38 pm
Va siendo hora de hacer un webTip con esto ^^

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox

 

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