Comunidad de diseño web y desarrollo en internet online

Uso de componentes. Como usar variables de fuera del comp?

Citar            
MensajeEscrito el 23 Mar 2009 11:29 pm
Hola, tengo un miniprograma que quiero convertir en un componente para utilizarlo en otro programa más grande.
El miniprograma consta de un mapa de googlemaps <maps:Map /> con un <mx:Canvas> con funcionalidades dentro (resumiendo).
Lo que quiero es usar ese Canvas en otro programa principal donde tengo definido otro <maps:Map /> y otras muchas funcionalidees,El problema es que el Canvas por si mismo sin <maps:Map> no funciona ya que usa métodos del objeto map. Pero como yo en mi programa principal ya tengo un <maps:Map> el componente no necesita tener otro dentro de su código, sino al usarlo estaría duplicando ese objeto, y si lo elimino del componente da error porque no reconoce cada vez que aparece map.un_método en el código.

Para que quede más claro pongo el código resumido:


La estructura del miniprograma que sí funciona es: Prueba.mxml

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:maps="com.google.maps.*" layout="absolute" width="100%" height="100%">
    <maps:Map id="map" key="mi-key" mapevent_mapready="onMapReady(event)" width="100%" height="100%" />
    <mx:Canvas  xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="200">
        ----Algunos VBOX y HBOX----
     </mx:Canvas>
    <mx:Script>
    <![CDATA[
      import com.google.maps.*;
      map.setCenter(new LatLng(42.819580715795915,-7.789306640625), 6, MapType.NORMAL_MAP_TYPE);
      /**  Resto de código **/
       ]]> 
     </mx:Script>
</mx:Application>


La forma en que lo he convertido a un componente: componentes/Componente1.mxml

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="200">
  -----HBOX y VBOX---
<mx:Script>
<![CDATA[
      import com.google.maps.*;
      map.setCenter(new LatLng(42.819580715795915,-7.789306640625), 6, MapType.NORMAL_MAP_TYPE);
 /**      ERROR  Acceso a una propiedad map no definida **/
]]> 
</mx:Script>
</mx:Canvas>



Y por útimo el programa principal donde quiero usar el componente creado.

Código :

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:maps="com.google.maps.*" xmlns:c="componentes.*" layout="absolute" width="100%" height="100%" viewSourceURL="srcview/index.html">
 <maps:Map id="map" key="mi-key" mapevent_mapready="onMapReady(event)" width="100%" height="100%" />
<c:Componente1/>
/** Resto del programa y funcionalidades que ya contenía**/
</mx:Application>



¿Qué hago mal? ¿Como transformo el miniprograma a un componente que no contenga un map pero se lo pueda pasar de alguna forma desde el programa principal al componente ya que lo necesita?
Gracias, un saludo.

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Mar 2009 11:06 am
Si tu componente arranca usando una instancia llamada map, alguien le tiene que decir de donde sale eso. Si por ejemplo es una variable pública de Application, podrías hacer

import mx.core.Application

Application.application.map.setCenter ......

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2009 12:21 pm
No entiendo tu explicación.
Mi componente necesita una variable map para funcionar, definida en forma de componente como te he dicho <map:Map>
Pero esa varaible ya la tengo en el programa principal. ¿Qué es lo que tengo que añadirle al componente para que no de el error? Puedes modificar ese código que he puesto?
Gracias.

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Mar 2009 12:34 pm
Mi componente necesita una variable map para funcionar


¿Donde está esa variable? (definida como id="map", no sirve el tag)

En Application.
Allí la busco y desde allí la uso

Luego tienes una confusión entre componente y variable

definida en forma de componente como te he dicho <map:Map>


Un tag define un componente, un id le da nombre de instancia, una variable puede apuntar a cualquier cosa. Según lo planteas, buscas una variable que apunte a una instancia de map

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2009 01:01 pm
A ver, igual me he explicado mal.
Tengo un programa principal main.mxml y uno de prueba prueba.mxml. El de prueba quiero convertirlo en un componente GeneradorRuta.mxml para poder usarlo en el principal sin copiar y pegar el código, simplemente con xmlns:c="componentes.*" y luego <c:GeneradorRuta/>

Tanto en el programa principal como en el de prueba uso un componente MAP de la API de GoogleMaps
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:maps="com.google.maps.*" layout="absolute" width="100%" height="100%">

Lo que quiero es usar la funcionalidad del prueba.mxml para que utilize el <map:Map> definido en mi main.mxml sin tener que copiar y pegar de un mxml a otro. Creo que lo puedo hacer convirtiéndolo a un componente, pero no tengo claro cómo.Espero que se haya entendido ahora

Gracias, un saludo.

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Mar 2009 01:03 pm
El componente ya lo tienes, y es el de GoogleMaps, y se define como Map. Luego hacer un componente de un componente, eso la verdad no lo veo nada claro

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2009 01:14 pm
No. Tengo el componente de GoogleMaps que utilizo en mis 2 programas. Pero en el prueba.mxml tengo además un canvas sobre el componente de GoogleMaps que hace una serie de cálculos, formularios etc. ESO es lo que necesito utilizar en mi otro programa donde tambien utilizo un componente de GoogleMaps para mostrar el mapa. Necesito el canvas con sus cálculos formularios etc para usarlo con otro mapa en otro programa diferente.
La única forma es copiar y pegar todo el código de uno a otro???

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Mar 2009 01:18 pm
Ponle un método setMap a tu componente, luego otros métodos que se puedan llamar a partir de que se ha seteado esa variable, recuerda que para que se puedan llamar tienen que ser métodos públicos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2009 04:32 pm
Vale, en mi componente he hecho:
GeneradorRuta.mxml
<mx:Script>
<![CDATA[

public var mapa_comp:Map;

public function setMap(var_mapa:Map):void {
this.mapa_comp = var_mapa;
}

Y ahora en el programa principal: main.mxml

<maps:Map id="map"
key="mi-key" mapevent_mapready="onMapReady(event)" mapevent_mappreinitialize="onMapPreInit(event)" width="100%" height="100%" themeColor="#CDD0CD"/>
<comp:GeneradorRuta />


Como le paso el mapa a GeneradorRuta. En el propio tag? En el script del programa.
He probado varias formas y me da error, puedes ayudarme? Gracias

Por riestra

73 de clabLevel



 

msie7
Citar            
MensajeEscrito el 24 Mar 2009 04:38 pm
Nop, esto va a thread sin fin.
El componente debe encapsular sus recursos, este no es el caso, ergo no hay componente.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2009 06:33 pm

solisarg escribió:

Si tu componente arranca usando una instancia llamada map, alguien le tiene que decir de donde sale eso. Si por ejemplo es una variable pública de Application, podrías hacer

import mx.core.Application

Application.application.map.setCenter ......

Jorge


Oye, no conocía este truco... Esta genial y muyyyyy util.. Gracias. :D

Por AXM

Claber

705 de clabLevel

8 tutoriales

Genero:Masculino  

Bogotá

firefox
Citar            
MensajeEscrito el 25 Mar 2009 11:03 am
Si te entiendo pero mi pregunta es cómo le paso el objeto Map por parámetro dentro del tag

Código :

<comp:GeneradorRuta/>
.
Si fuese en un bloque script sabría hacerlo GeneradorRuta.setMap(map) pero dentro de la etiqueta no tengo ni idea.

Por riestra

73 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 Mar 2009 11:24 am
Cualquier variable que declares pública en un componente, luego es accesible desde el tag. Si tu componente tiene:

public var map:Map

Luego haces

<comp:GeneradorRuta map="loquesea"/>

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Mar 2009 11:48 am
Lo se, es la parte derecha de la asignación la que me da el problema. El parámetro map.

<maps:Map
id="map"
key="ABQIAAAAo8JQ4SXXffp4Waxa9tfNqRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSyum7PaokdUoouJ_hGJF4J237gqw"
mapevent_mapready="onMapReady(event)" mapevent_mappreinitialize="onMapPreInit(event)"
width="100%" height="100%" themeColor="#CDD0CD"/>

<comp:GeneradorRuta setMap="map"/> //Así da error porque espera un objeto Map y recibe cadena de texto

Por riestra

73 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 Mar 2009 11:58 am
Si map es una instancia del mapa, evalúa:

setMap="{map}"

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Mar 2009 12:14 pm
Por fin llegamos al final del thread. Ha costado jeje.
Gracias.

Por riestra

73 de clabLevel



 

msie7

 

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