Comunidad de diseño web y desarrollo en internet online

llamar funciones desde onLoad en una clase

Citar            
MensajeEscrito el 06 Ago 2005 09:52 pm
Holas cuanto tiempo tengo una duda con respecto a las llamadas de funciones que se hacen desde un evento onLoad, y es que no las hace; el problema se encuentra entre las funciones sendMail() y recibe().

Hay alguna manera de poder hacer llamadas de funciones desde un evento onLoad en una clase?.

Dejo el *.fla aqui

Gracias de antemano.

Código :

/* 
*    CLASE PARA VALIDACION DE FORMULARIOS v0.6
*/

class txt.form.allRequireds {
   private var p:MovieClip;
   private var me:MovieClip; //me = mensaje
   private var e:String;
   private var c:String;
   private var envio_lv:LoadVars; 
   private var recibir_lv:LoadVars;
   
   /*
   * ra: ruta actual
   * po: popap
   * m: mail
   * cm: comentario
   */
   function allRequireds(ra:MovieClip, po:MovieClip, m:String, cm:String){   
      this.p = ra;
      this.me = po;
      this.e = m;
      this.c = cm;
      
      this.envio_lv = new LoadVars();
      this.recibir_lv = new LoadVars();
      
      if(m != "" && po != "" && cm != ""){
         this.init();
      }            
   }
      
   private function init(){
      var er:Number = 1;
      
      for(var i in this.p){
         if(typeof(this.p[i]) == "object"  && this.p[i]._name.indexOf("txt") != -1){
            // buscando en todas las cajas, menos...
            if(this.p[i].text == "" && this.p[i]._name != this.e && this.p[i]._name != this.c){
               this.Estado("Todos los campos son requeridos. Gracias");
               er = 1;
            }
            
            // énfasis en el mail
            if(this.p[i]._name.indexOf(this.e) != -1){
               if(this.p[i].text == "" || this.p[i].length < 5){
                  this.Estado("Y el email?");
                  er = 1;
               }
               else if(this.p[i].text.indexOf("@") == -1){
                  this.Estado("Un email sin \"@\"?");                  
                  er = 1;
               }
               else if(this.p[i].text.indexOf(".") == -1){
                  this.Estado("Necesitamos un email mas real");   
                  er = 1;
               }
            }
            
            // énfasis en el comentario.
            if(this.p[i]._name.indexOf(this.c) != -1){
               if(this.p[i].text == "" || this.p[i].length < 10){
                  this.Estado("Agradecería que nos comentes algo.");   
                  er = 1;
               }
               else{
                  er = 0;
               }
            }
         }          
      }
      
      if(er == 0){
         trace("er: " + er)
         this.sendMail();
      }      
   }
   
   private function Estado(myDato:String):Void{
      //trace("myDato: " + myDato)
      
      this.me._visible = true;
      this.me.txtEstado.text = myDato;
   }
   
   public function sendMail(){
      //agrgar las variables que se envian a php
      this.envio_lv.sendAndLoad("email.php", this.recibir_lv, "POST");
      
      this.recibir_lv.onLoad = recibe
   }
   
   private function recibe(exito){
      if(exito){
         trace("exito: " + exito);
         
         var r:LoadVars = new LoadVars();
         r = LoadVars(this);
         
         trace("r: " + r)
         
         this.Estado("aqui se recibe _estado dede email.php");
         this.clearAll();                  
      } 
      else{
         this.Estado("Ha ocurrido un error intentelo mas tarde");
      }      
   }
   
   
   public function clearAll(){
      for(var i in this.p){
         if(typeof(this.p[i]) == "object"  && this.p[i]._name.indexOf("txt") != -1){
            this.p[i].text = "";
         }
      }
   }
}

Por phpleo

130 de clabLevel

1 tutorial

 

Lima, Perú

firefox
Citar            
MensajeEscrito el 06 Ago 2005 10:29 pm
si aqui lo hiciste bien

Código :

this.clearAll();


por que aqui no?

Código :

 this.recibir_lv.onLoad = recibe 

es asi:

Código :

 this.recibir_lv.onLoad = this.recibe; 

:wink: [/code]

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 06 Ago 2005 10:32 pm
ah por cierto si tienes duda sobre los parentesis, va sin los () porque lo estas asignando no la estas llamando :wink:

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 06 Ago 2005 10:32 pm
Porque no haces una subclase de LoadVars que acepte un argumento que sea el objeto con el que se comunica? Tambien podrias "decorar" tu clase LoadVars en una nueva, por si no quieres hacerla subclase. Yo en lo personal crearia un evento onLoad para tu clase "allRequireds" usando algun objeto como el ASBroadCast (o bien, construyendo el tuyo propio) y este evento lo dejaria "libre"...o sea, que puedas definir que ocurrira cuando se detone la carga, para darle flexibilidad a tu clase. Un buen tutorial de creacion de eventos para clases lo encuentras en ultrashock (aunque esta en AS 1, pero lo importante es la teoria). Una manera menos elegante seria esto....

Código :

   function allRequireds(ra:MovieClip, po:MovieClip, m:String, cm:String){    
      this.p = ra; 
      this.me = po; 
      this.e = m; 
      this.c = cm; 
       
      this.envio_lv = new LoadVars(); 
      this.recibir_lv = new LoadVars(); 
      this.envio_lv.obj = this;
      this.recibir_lv.obj = this;
      if(m != "" && po != "" && cm != ""){ 
         this.init(); 
      }             
   }


Dado que LoadVars es una clase dinamica, te puedes permitir crearle una propiedad extra que apunte al objeto que lo creo. Dentro de tu onLoad unicamente invocarias los metodos del "allRequireds" usando this.obj.metodo()
Pero esta ultima opcion no me gusta nada...prefiero crear una subclase o una clase "decorada" del LoadVars y agregarle ahi una serie de metodos que permitan la comunicacion con la clase "allRequireds" mediante eventos.

Saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 06 Ago 2005 10:36 pm
Hola Maikel, un comentario:

poner esta linea :

Código :

 this.recibir_lv.onLoad = recibe


es exactamente lo mismo que poner

Código :

this.recibir_lv.onLoad = this.recibe;


El compilador de Actionscript 2.0 si ve que a una variable no se le declaro el this, primero la busca como posible variable temporal dentro de los argumentos del metodo. Si no lo encuentra ahi, le agregua automaticamente el this en caso de que encuentre una similitud en nombres con alguna propiedad de la clase.

Saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 07 Ago 2005 05:32 pm
cierto, sorry :crap:

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

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