Comunidad de diseño web y desarrollo en internet online

Pasar valores entre componentes (flex)

Citar            
MensajeEscrito el 24 Ene 2011 05:26 am
Buen día:
Espero puedan ayudarme y de antemano muchas gracias, tengo un problema quizás algo sencillo para usuarios experimentados de flex, el problema consiste en pasar datos de objetos de un componente a otro ejemplo:

Supongamos tengo un componente llamado Componente1, dentro de este tengo un cuadro de texto nombrado txt01.
en el siguiente componente llamado Componente2, dentro de este tengo un cuadro de texto llamado txt02 y un botón que se supone debe realizar una función que extraiga el valor del campo de texto txt01 y lo guarde en txt02.
Componente1
txt01
-------------------
Componente2
txt02
btm01


Claro el componente 1 y componente 2 no son padre e hijo son componentes independientes.
en lo que e investigado e tratado con lo siguiente:

Código ActionScript :

//sp01.as
[Bindable] public var cmp1:Componente1;
[Bindable] public var cmp2:Componente2;
public  function copy():void{
     cmp2.txt02.text=cmp1.txt01.text;
}

me elimina errores pero trunca el programa en ejecución, sin realizar la extracción.
De antemano muchas gracias, y espero puedan ayudarme.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 24 Ene 2011 07:30 am
BuenAS:

Si lo quieres hacer por código, utiliza:

Código ActionScript :

BindingUtils(txt01, "text", txt02, "text");


Una forma rápida es ir a la definición en el mxml:

Código Flex :

<s:TextInput id="txt02" text="{txt01.text}" />


Cambia la ruta de tus componentes en función de la jerarquía que tengan. Aunque si ambos componentes están en un mismo componente padre donde estás escribiendo el código, sus id's serán visibles y no debería ser necesario utilizar la notación de pto.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 24 Ene 2011 02:52 pm
Hola: gracias por contestar, no, no son padre, son componentes distintos con distintos objetivos, para mandar a llamarlo si fuese padre e hijo seria con

Código ActionScript :

Application.application.txt02 =  Application.aplication.txt01;



Lo que busco es, jalar datos de un componente (x) a otro componente, te explico, en mi main(o index) tengo un viewstack, donde muestro estos componentes, y por una necesidad necesito extraer valores del componente1 para posteriormente usarlos en el componente2, algo asi como tomar el valor de txt01 y alojarlo en una variable y después en el componente2, esa variable agregarla a un txt02 y limpiar o borrar el contenido del txt01 en el componente1 o bien mandar un alert con ese valor de la variable.
El objetivo principal es poder manipular desde un compoente (componente1) los objetos del componente2, cuando ambos componentes son individuales mejor dicho, no son padre e hijo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 24 Ene 2011 04:35 pm
Para eso debes usar eventos, flex es totalmente basado en estos, puedes disparar un evento en un componente y el otro lo puede interceptar si ambos están activos al mismo tiempo, si no están activos al mismo tiempo, puedes usar un singleton para almacenar la información como si fueran variables globales (se que algunas personas tienen métodos más elaborados, pero francamente me parece paranoia, un singleton funciona bien ¬¬)

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 24 Ene 2011 07:46 pm
BuenAS:

Que sean dos componentes de un ViewStack creo que no debe darte mayor problema.

Echa un vistazo a este ejemplo con un ViewStack. Si cambias el texto del textInput del panel A, automáticamente se cambia en el panel B. Como posiblemente busques también que al cambiar el texto en el panel B se cambie en el A, en el código está comentada la forma de hacer un binding en ambos sentidos:

Ver ejemplo

Código Flex :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
   xmlns:s="library://ns.adobe.com/flex/spark" 
   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="640" minHeight="480">
   <!--
   <fx:Binding source="text01.text" destination="text02.text" twoWay="true" />
   -->
   <fx:Declarations>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
   </fx:Declarations>
   
   <s:VGroup horizontalCenter="0" top="10" horizontalAlign="center">
      <s:HGroup>
         <s:Button id="searchButton" label="Panel A"
            click="viewStack.selectedChild=panelA;"/>
         <s:Button id="cInfoButton" label="Panel B"
            click="viewStack.selectedChild=panelB;"/>
      </s:HGroup>
      <mx:ViewStack id="viewStack"
         width="400" height="300" horizontalCenter="0" top="10">
         <s:NavigatorContent id="panelA"
            label="Panel A" width="100%" height="100%">
            <s:Panel title="Panel A" left="0" top="0" right="0" bottom="0">
               <s:HGroup left="10" top="10" verticalAlign="middle">
                  <s:Label text="Texto inicial panel A" />
                  <s:TextInput id="text01" />
               </s:HGroup>
            </s:Panel>
         </s:NavigatorContent>
         <s:NavigatorContent id="panelB"
            label="Panel B" width="100%" height="100%">
            <s:Panel title="Panel B" left="0" right="0" top="0" bottom="0">
               <s:HGroup left="10" top="10" verticalAlign="middle">
                  <s:Label text="Texto final panel B" />
                  <s:TextInput id="text02"
                     text="{text01.text}"/>
               </s:HGroup>
            </s:Panel>
         </s:NavigatorContent>
      </mx:ViewStack>
   </s:VGroup>
</s:Application>


Por otro lado, el código que pones:

Application.application.txt02.text = Application.aplication.txt01.text;

no hace un binding permanete; lo que hace es que el valor inicial de la propiedad "text" de txt01 se lo asigne a txt02, pero sólo al principio.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 24 Ene 2011 07:56 pm
El problema con la respuesta de Lukánicos es el tighly coupling, pero si no tienes problemas con ello y tu aplicación no va a crecer y no vas a cambiar el nombre de los componentes nunca, es una solución simple y rápida.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 24 Ene 2011 08:06 pm

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome

 

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