• No se han encontrado resultados

5 Componentes

N/A
N/A
Protected

Academic year: 2020

Share "5 Componentes"

Copied!
57
0
0

Texto completo

(1)

Flex 4

(2)

Binding Expressions

Una expresión enlazable permite mover datos

de un objeto a otro en tiempo de ejecución sin necesidad de gestionar complejos eventos o escribir partes de código AS.

Representan sólo una posibilidad para

(3)

<s:TextInput id=“origen” text=”cualquier

dato”/>

<s:Label id=”destino”/>

El valor de la propiedad texto del primer

(4)

Flex nos ofrece tres tipos de sintaxis para

binding

envolver la expresión enlazada en un atributo de

una declaración MXML

usando la etiqueta<fx:Binding>

(5)

Binding 1

Asignamos un id único al control origen

En el control destino, usamos una expresión As que

hace referencia a la propiedad text del control origen con {}

<s:TextInput id=”origen” text=”cualquier valor”/><s:Label text=”{origen.text}”/>

En tiempo de ejecución, si la propiedad text del control

(6)

enlazar dos componentes entre ellos

En Flex 3:

<s:TextInput id=”input1” text=”{input2.text}”/><s:TextInput id=”input2” text=”{input1.text}”/>

En Flex 4

(7)
(8)

Binding 2 – fx:Binging

En la etiqueta fx:Binding utilizamos sus

propiedades source y destination

<fx:Binding source=”sourceText.text”

destination=”destinationText.text”/>

Esta etiqueta se puede usar cuando el objeto

(9)

Ejemplo

<fx:Script><![CDATA[[Bindable]

private var myVar:String]]>

</fx:Script>

<fx:Binding source=”myInput.text” destination=”myVar”/><s:TextInput id=”myInput”/>

(10)

Crear expresiones bindable

La mayoría de propiedades de los objetos en la biblioteca de Flex son bindable

significa que si el valor de la propiedad cambia en

tiempo real, el nuevo valor es lanzado para actualizar el objeto de destino

Si declaramos variables en AS, sus valores NO son bindables por defecto.

Debemos marcarlos como tal con la etiqueta

(11)

Error

<fx:Script><![CDATA[

private var myVar:String=”hola”;

]]>

</fx:Script>

<s:Label id=”destinationLabel”

(12)

Explicación

la variable myVar comparte su valor con el

control destinationLabel cuando la aplicación arranca, pero puesto que la variable no se ha marcado como bindable, cualquier cambio en tiempo real no será pasado al control.

El compilar nos avisa de este problema y

(13)

Solución

<fx:Script><![CDATA[

[Bindable]

private var myVar:String=”hola”;

]]>

</fx:Script>

<s:Label id=”destinationLabel”

(14)

la etiqueta de metadato [Bindable] debe

colocarse justo antes de la variable que modifica.

Tb se puede poner todo en una misma línea

(15)

Arquitectura Model – View - Controller

Una aplicación Flex puede tener muchas “vistas”

pantallas o representaciones visuales de datos que ejecutan

funciones, recogen datos, o presenta la info del usuario.

Si intentamos implementar todas esas vistas en un único fichero

source, el resultado no es muy bueno.

Igual, la aplicación puede necesitar hacer llamadas a

servidores remotos para conseguir datos, implementar

estructuras de objetos que gestionan esos datos en tiempo real.

En la clásica arquitectura MVC, las partes de la aplicación que

hacen esas llamadas, y las clases que contienen o representan

(16)

Controller es responsible de recibir y interpretar las

entradas de usuario.

En Flex, el controler es implementado como un

mapping de los eventos de la aplicación.

Podemos crear componentes view con MXML o As

pero la mayoría de componentes MXML cumplen eficazmente esta función.

Vamos ver cómo crear Vistas para la aplicación con

(17)

Crear un nuevo componente MXML

Se recomienda crear subcarpetas dentro del paquete root y

nombrarlos en minus

boton derecho en carpeta src del proyecto – New – folder

– la llamamos components

– boton derecho en la nueva carpeta

new – mxml componentNombre : Componente1 • Layout en VerticalLayout

• Based of Panel

• Finish

(18)

Componente1

<?xml version="1.0" encoding="utf-8"?>

<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"> <s:layout>

<s:VerticalLayout/> </s:layout>

<fx:Declarations>

<!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations>

(19)

Podemos borrar el elemento fx:Declarations y

poner un título en vista Design al nuevo Panel

Tb podemos “personalizar” la posición del

componente con atributos padding dentro de VerticalLayout

Puedes tb arrastrar otros componentes dentro

(20)

Instanciar componentes MXML

Si el componente personalizado MXML representa

un objeto visual tnato un contenedor como un control, lo más habitual es instanciarlo usando código MXML.

Debemos declarar un namespace personalizado que

asocia con la carpeta que almacenada el fichero fuente mxml del componente

Podemos indicar la carpeta con todos los

(21)

<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”

xmlns:components=”components.*”>

(22)

añadir el componente a un fichero MXML

Creamos un nuevo fichero MXML

colocas el curso después de Application pero

no dentro de Declarations

escribes <nombre componente

lo cierras con />

en la etiqueta Application nos añade el

namespace necesario

(23)

Solución – UseComponent.mxml

<?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” xmlns:components=”components.*”>

<s:layout>

<s:VerticalLayout horizontalAlign=”center” paddingTop=”20”/> </s:layout>

(24)

Tb lo puedes hacer desde vista Design

Debemos arrastrar el componente

personalizado desde el panel Components

si el namespace no ha sido creado, Flash Builder

(25)

Instanciar componente personalizado con AS -

UseComponentWithAS.mxml

<?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” creationComplete=”app_creationCompleteHandler(event)”> <fx:Script> <![CDATA[ import components.MyComponent_Complete; import mx.events.FlexEvent;

protected var comp:MyComponent_Complete;

protected function app_creationCompleteHandler(event:FlexEvent):void {

comp = new MyComponent_Complete(); comp.x = 100;

comp.y = 100;

this.contentGroup.addElement(comp); }

]]>

(26)
(27)

Objetos miembro

Los componentes y las clases pueden tener objetos miembro.

Un objeto miembro es un elemento predeclarado que está

instanciado en la clase.

Las clases de AS soportan los objetos miembro:

Properties.

tiene valores dinámicosConstants.

tienen valores fijosMethods.

ejecutan accionesEvents.

envian mensajes a otras partes de la aplicaciónStyles.

(28)

Declarar una propiedad

la sintaxis para declarar una propiedad es:

[access modifier] var [variable name]:[data type];

Una propiedad llamada propiedad1 con un

tipo de dato String sería:

public var propiedad1:String;

Podemos establecer una valor inicial a la

propiedad:

(29)

Propiedades static

Una propiedad static es un valor a la que podemos

hacer referencia desde cualquier parte de la aplicación desde la definición de clase

Para hacer una propiedad static, añadimos static

delante o detrás del modificador de acceso – public static var myStaticVar:String;

para referirnos a la propiedad, usamos el nombre de

clase com prefijo

(30)

Propiedad bindable

Las propiedades son bindable solo si

explícitamente las hemos marcado con la etiqueta [Bindable]

Siempre comunica los cambios en su value a

todos los objetos dentro del componente.

Si la propiedad es public, comunica los

(31)

Ejemplo propiedad bindable

Creamos un componente personalizado

basado en un Group

Este componente puede ser una Label que

(32)

Solución - CompWithBindableProp

<?xml version=”1.0” encoding=”utf-8”?>

<s:Group xmlns:fx=”http://ns.adobe.com/mxml/2009” xmlns:s=”library://ns.adobe.com/flex/spark” xmlns:mx=”library://ns.adobe.com/flex/mx” width=”400” height=”300”> <fx:Script> <![CDATA[ [Bindable]

public var valueToDisplay:String; ]]>

</fx:Script>

(33)

Declarar propiedades con MXML

<fx:String id=”valueToDisplay”/>

Cualquier propiedad declarada por esta vía,

implícitamente está marcada como public y bindable .

Al declarar una propiedad usando MXML,

debemos envolverla dentro de <fx:Declarations> .

(34)

<?xml version=”1.0” encoding=”utf-8”?>

<s:Group xmlns:fx=”http://ns.adobe.com/mxml/2009” xmlns:s=”library://ns.adobe.com/flex/spark”>

<fx:Declarations>

<fx:String id=”mxmlVar”/> </fx:Declarations>

(35)

Pasar datos a una propiedad

Podemos pasar datos a una propiedad tanto

declarada con As como MXML.

Para pasar datos usando una declaración MXML:

declaramos la propiedad como un atributo XML del

objeto y ponemos su valor con un valor literal o con una binding expression

con literal

<components:MyComponent valueToDisplay=”hola”/>

con binding expression

(36)

Constantes

Una constante es una propiedad cuyo valor

está establecido cuando se declara y nunca cambia.

private const ALLPRODUCTS:String=”All Products”;public static const SELECTED:String=”selected”;

(37)

Puesto que el valor de la constante nunca

cambia, no tiene sentido marcarla como bindable.

Si se marca con la etiqueta [Bindable] el

(38)

Métodos

Se trata de una función que pertenece a una

clase o a un componente.

En el contexto de las definiciones de clase, un

método define cómo una clase puede realizar una tarea concreta

Tb se puede considerar un método como una

función o una subrutina.

De hecho, en AS los métodos se marcan con la

(39)

Definir un método

[access modifier] function [methodName]([argument declarations] ):[data type]

{}

Un ejemplo de método podría ser

public function getValue():String{

(40)

Modificadores de acceso en los métodos

Al igual que las propiedades, los métodos son

marcados con uno de los cuatro modificadores de acceso : public, private, protected y

internal.

Si no incluimos un modificador, el acceso por

(41)

Ejemplo

Crear un componente con

dos propiedades públicas para el nombre y

apellido

deben ser bindables?

un método getFullName() que devuelva la cadena

concatenada

(42)

Solución - CompWithPublicMethod

<?xml version="1.0" encoding="utf-8"?>

<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/mx" width="200" height="150">

<s:layout>

<s:VerticalLayout paddingLeft="10" paddingTop="10"/> </s:layout>

<fx:Script> <![CDATA[ [Bindable]

public var firstName:String;

[Bindable]

public var lastName:String

public function getFullName():String

{

return firstName + " " + lastName;

} ]]>

</fx:Script>

(43)

Ejemplo

Ahora debemos llamar a los métodos del

componente

Lo podemos hacer con sentencias AS o con

(44)

Aplicación que llama al método del componente con una binding expression

UseComponentWithMethod.mxml

<?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” xmlns:components=”components.*”>

<s:layout>

<s:VerticalLayout horizontalAlign=”center” paddingTop=”20” gap=”20”/> </s:layout>

<components:CompWithPublicMethod id=”myComp”

firstName=”juan” lastName=”lopez”/>

(45)

Cuando llamas a un método del componente

sin argumentos en una binding expression, se ejecuta sólo en la construcción inicial del

objeto (cuando la aplicación arranca).

Esta sintaxis no tiene un sistema para decirle a

Flex que el método podría llamarse otra vez

<s:Label text=”{myComp.getFullName()}”/>

(46)

los valores de la propiedad del componente se

pasan con expresiones que enlazan con controles visuales en la aplicación y la

(47)

Llamar a un método de componente con AS -

CallComponentMethodWithAS

<?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” xmlns:components=”components.*”>

<s:layout>

<s:VerticalLayout horizontalAlign=”center” paddingTop=”20”/> </s:layout> <components:CompWithPublicMethod id=”myComp” firstName=”{firstNameInput.text}” lastName=”{lastNameInput.text}”/> <s:TextInput id=”firstNameInput”/> <s:TextInput id=”lastNameInput”/> <s:Label id=”fullNameOutput”/> <s:Button label=”Get Full Name”

(48)

Librerías de componentes

(49)

Un component library es un fichero en

formato ZIP que tiene una extensión .swc

Son compatibles con aplicación Flex creadas

con:

Flash CS3 o CS4

Flex SDK en línea de comandos

Un proyecto Flex Library creado y gestionado en

(50)

Crear library project

File - New -Flex Library ProjectEn el asistente

ponemos un nombre

indicamos su ubicación

si vamos a incluir las librerías para Adobe AIR

en la siguiente ventana

si debemos incluir alguna imagen o algún fichero XML lo

indicamos en la ficha Assets

se pueden añadir después desde Propiedades del proyecto

(51)

Crear componente en la librería

La carpeta raíz es src

Aquí podemos crear un paquete

boton derecho en src – new – package

Dentro del paquete podemos crear un MXML component

una vez construido el componente

project – build

(52)

El fichero swc es un fichero comprimido en

formato ZIP

Contiene un fichero SWF con los componentes

y clases en código compilado y un fichero en formato XML catalog.xml que lista los

(53)

fxp y fxpl

Al exportar un Flex Project library en el nuevo

(54)

Usar componentes de librerías

Podemos incorporar componentes de librería

en nuestra aplicación Flex de dos maneras:

Añadir la librería al source path del Flex Project

(55)

Añadir librería al path

Cada Flex Project tiene una build path que consiste

en una lista de carpentas y librerías de componentes que muestras las clases y componentes disponibles para el proyecto.

La build path incluye una source path de carpetas en

donde el código fuente As y MXML se almacena y una library path que indica las librerias de

componentes compilados

El build path se establece en las propiedades del

(56)

Seleccionamos el Flex Project

Project – Properties – Build Path – click en

Library path

hay varías vías para incluir la librería

debemos asegurarnos que el proyecto de librería

está abierto

Tb podríamos copiar el fichero swc en la carpeta

(57)

Referencias

Documento similar

margin: Este par´ ametro, definido en [Driedger et al., 2014], nos permite obtener, adem´ as de las componentes arm´ onicas y percusivas, una componente residual para los sonidos que

En relación al componente semántico es significativa la relación entre los juegos verbales y el componente semántico en niños y niñas de 5 años de la I.E.I 552 Hermacia

Para protanopía (se quiere realzar los rojizos), esta función tendrá el valor 1 cuando la componente Roja de la imagen sea simultáneamente mayor que la componente verde (G) y Azul

Este método tiene la finalidad de proporcionar una gran cantidad de magnitudes de la matriz de cargas sparse; es decir, nulas, haciendo que cada componente principal

Podemos mejorar la educación y el proceso de aprendizaje haciéndolo

la cual, introducida en la función kemel de densidad espectral estimada posibilitará que el estimador resultante de S, sea una matriz semidefinida positiva. Esta

Componente princi_pa,: CAE.CITA Componentes secundario: CUARZO Y en menor rroporci6n-..

Para esta proyecto se han desarrollado todos los subsistemas de la arquitectura mediante componente Java Beans y se ha intentado dar a cada uno de los componentes una