Comunidad de diseño web y desarrollo en internet online

Problema al dividir el código de la aplicacion

Citar            
MensajeEscrito el 01 Jun 2009 10:54 am
Hola, estoy dividiendo mi aplicacion metiendo los actionscrips en un sitio los xml en otro y tengo un problema. Teniendo todo junto me funciona pero al dividirlo me da un error en el actionScript. Os pongo el código para que me veais más fácilmente en donde fallo.

apllication.mxml:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"   width="1024" height="768"
   xmlns:comp="componentes.*" xmlns:class="action.*">
   <mx:Script>
   <![CDATA[
      import action.AbrirVentanas;
      import action.Carpetas;
   ]]>
   </mx:Script>
   
   <mx:Button x="437" y="36" label="Connect" id="connect" click="AbrirVentanas(event)"/>

</mx:Application>


AbrirVentanas.as:

Código :

package action
{
   import flash.events.MouseEvent;
   
   import mx.containers.TitleWindow;
   import mx.managers.PopUpManager;
   
   public class AbrirVentanas
   {
      public function AbrirVentanas(event:MouseEvent):void {
       var objConnecting:TitleWindow = new Cuentas();
      PopUpManager.addPopUp(objConnecting,this,false);
      PopUpManager.centerPopUp(objConnecting);
       }
    }
}


El error me da en la línea del addPopUp y es el siguiente:

1067: Conversión implícita de un valor de tipo action:AbrirVentanas a un tipo flash.display:DisplayObject no relacionado.

Puede que me este saltando algo, he probado bastantes cosas y puede que esta no sea la que mas cerca este, pero es la que tengo cuando todo el codigo esta junto, y funciona.

Gracias a todos!

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 11:53 am
No debes crear una clase, sino simplemente una funciín que ejecute el evento, ponlo así

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"   width="1024" height="768"
   xmlns:comp="componentes.*" xmlns:class="action.*">
<mx:Script>
   <![CDATA[
      private  function AbrirVentanas(event:MouseEvent):void {
        var objConnecting:TitleWindow = new Cuentas();
        PopUpManager.addPopUp(objConnecting,this,false);
        PopUpManager.centerPopUp(objConnecting);
       }
   ]]>
   </mx:Script>
   
   <mx:Button x="437" y="36" label="Connect" id="connect" click="AbrirVentanas(event)"/>

</mx:Application>


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jun 2009 01:33 pm
Gracias pero eso ya lo tengo, es el código que tengo cuando tengo todo junto en una aplicación.

La cosa es que quiero extraer la funcion de la aplicación general porque como ejemplo de error he puesto una función, pero pueden ser 50 funciones en total y los quiero tener divididos y organizados.

De todas formas gracias!

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 01:41 pm
Entonces no crees una clase con el nombre de la función que quieres invocar, crea una clase que puedes llamar Controler, y mete métodos públicos para todo lo que necesites, luego la instancias en tu MXML y luego le asignas las acciones de los controles que tengas en tu página ... de hecho es lo que hacen la mayoría de los frameworks

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jun 2009 01:55 pm
Ok, eso es lo que tenía antes, pero no me ha funcionado. Me estás hablando de algo así?

Controlers.as:

Código :

package action
{
   import flash.events.MouseEvent;
   import mx.containers.TitleWindow;
   import mx.managers.PopUpManager;
   
   public class Controler
   {
      public function AbrirVentanas(event:MouseEvent):void {
          var objConnecting:TitleWindow = new Cuentas();
         PopUpManager.addPopUp(objConnecting,this,false);
         PopUpManager.centerPopUp(objConnecting);
       }
   }
}


application.mxml:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"   width="1024" height="768"
   xmlns:comp="componentes.*" xmlns:class="action.*">
   
   <mx:RemoteObject id="srv" destination="Princi"/>

   <mx:Script>
   <![CDATA[
      import action.Controler;
      var controls:Controler = new Controler;
   ]]>
   </mx:Script>

   <mx:Button x="437" y="36" label="Connect" id="connect" click="controls.AbrirVentanas(event)"/>


Con esto me sigue dando el mismo error. Te he entendido mal? Puedes probar si a ti te funciona con este codigo?

Gracias

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 02:17 pm
Falta ...

1. Tener una variable que loi referencie

private var controls:Controler

2. Instanciarlo en el creationComplete de Application, que llama a un método init

[as]
private function init(evt:Event){
controls = new Controler()
}

Si asignas directamente a controls.XXX, probablemente te de error porque no ha instanciado el controler, prueba haciendo un cast para evitar el error en tiempo de compilación

click="{Controler(controls).AbrirVentanas(event)}"/>

El método AbrirVentanas debe ser público

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Jun 2009 02:52 pm
Me faltaba el creation complete si(aparte de otros cambios), pero una cosilla. La función de AbrirVentanas está bien? Me sigue dando un error y ya estoy desesperado. El objetivo es que abra un componente que se llama Cuentas.

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 05:51 pm
Si cuentas extiende Displayobject (o uno de sus hijos), puedes hacer:

var objConnecting:DisplayObject = new Cuentas();

Si no te lo acepta, es porque cuentas no está extendiendo algún tipo/subtipo de DisplayObject (por ejemplo Sprite)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Jun 2009 07:01 am
Se que estoy siendo algo pesado, lo admito, jeje, pero no lo consigo. Podrías probar a separar el código que me has puesto en el segundo post tu mismo? Creando un archivo applicationy otro AbrirCuentas.as, tomando en cuanta que tiene que abrir un componente TitleWindow que se llama Cuentas?

No se si es mucho pedir, pero seguro que terminamos antes y te molesto menos.

Gracias por toda la ayuda!

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2009 11:36 am
No me molesta que preguntas, pero sorry, no tengo tiempo de probar por ti. Dado que quieres optimizar tu code, creo que eres tu el que debe cansarse de hacer pruebas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Jun 2009 11:52 am
Ok gracias de todas formas. Lo decía porque igual lo veias claro y lo hacías en 1 minuto, pero si es trabajo no pasa nada.

Gracias!

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2009 12:13 pm
Y quizás menos ... pero no se trata de ahorrarte tiempo, sino de que tu aprendas ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Jun 2009 07:52 am
Jeje, ok. Por ahora lo voy a dejar porque ya se que es simple pero no lo consigo y estoy perdiendo tiempo. Cuando tenga las cosas más clarás ya me pondré de nuevo.

Gracias de todos modos!

Por zakabalt

48 de clabLevel



 

firefox

 

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