Propiedades y vinculaciones

Una de las tareas más comunes cuando se desarrolla una aplicación con una GUI es mantener la interfaz de usuario y los datos sincronizados. Por ejemplo, supongamos que utilizas herramientas convencionales para desarrolladores a fin de crear una aplicación web que permita navegar y editar registros de clientes. Sin App Maker, tendrías que buscar una manera de mantener la IU de la aplicación y los registros de la base de datos sincronizados mediante los siguientes pasos:

  1. Actualiza cada elemento de la IU que muestra datos cuando se solicita el siguiente registro en la base de datos.

  2. Agrega objetos de escucha de cambio a todos los elementos de la IU para garantizar que los cambios del usuario se reflejen en el registro del cliente.

  3. Actualiza el registro del cliente actual para recibir los datos nuevos.

Es bastante código estándar para escribir y mantener. Esto les resulta difícil a los programadores, y puede ser un verdadero obstáculo para quienes no lo son.

Con App Maker, en lugar de tener que escribir todo el código estándar, usas vinculaciones para indicar que una propiedad en el registro del cliente y una propiedad de un widget deben mantenerse sincronizadas. Además, haces todo esto en una interfaz visual fácil de usar. Eso es todo: App Maker hace el resto del trabajo por ti.

Más allá de esta situación común, las vinculaciones de App Maker logran mucho más que solo mantener los elementos de la IU sincronizados con los valores subyacentes. Puedes utilizar una vinculación de App Maker para mantener sincronizadas dos propiedades de App Maker, como el correo electrónico del usuario que ha accedido y un parámetro de búsqueda de fuente de datos. De hecho, como casi todo en App Maker tiene vinculaciones (modelos, fuentes de datos, widgets y secuencias de comandos), puedes usar vinculaciones en una variedad de propiedades de App Maker.

Propiedades

Enunciado de forma simple, una propiedad es un valor nombrado de un objeto de App Maker. Puedes obtener y establecer los valores de las propiedades en App Maker. La mayoría de los objetos de App Maker tienen propiedades a las que puedes acceder desde partes de tu aplicación.

Puedes establecer propiedades de las siguientes maneras:

  • En la IU de App Maker: cuando estableces el nombre de un widget.
  • Mediante una vinculación: cuando una propiedad cambia para reflejar las actualizaciones de otra propiedad.
  • En una secuencia de comandos: puedes establecer una propiedad con JavaScript.

Puedes acceder a una variedad de propiedades:

  • campos en los registros de la base de datos
  • la dirección de correo electrónico del usuario que ha iniciado sesión
  • atributos del widget, como posición, nombre o valor

De hecho, las propiedades se encuentran en todas partes de App Maker. El lugar más común es el Editor de propiedades, que se muestra a continuación:

y el selector de vinculación siguiente:

Objetos

Para profundizar nuestra exploración de las propiedades, analizaremos los objetos. Los objetos son los “elementos” que conforman App Maker y las aplicaciones de App Maker. Casi todo en App Maker es un objeto. ¿Qué son estos elementos? Son los widgets que componen tu IU, los registros que representan tus datos, los objetos de fuente de datos que leen y escriben datos por ti, y mucho más. Incluso tu aplicación en sí es un objeto.

Por ejemplo, un widget de área de texto es un objeto de App Maker con varias propiedades, incluidas nombre y etiqueta. Un registro de datos es un objeto de aplicación que tiene propiedades que tú defines, como un registro de cliente con una propiedad de nombre.

Tipos

Todas las propiedades de App Maker tienen un tipo de datos. Esto significa que solo aceptan tipos específicos de valores, como números o strings. Muchas propiedades tienen tipos simples, como string, número o booleano, pero algunas propiedades tienen tipos complejos. Por ejemplo, la propiedad superior de un widget también es un widget y, por lo tanto, se escribe como Widget.

Rutas de acceso

App Maker usa una notación de ruta para referirse a las propiedades cuando hace referencia a ellas en vinculaciones o en secuencias de comandos. Por ejemplo, si tenemos un objeto de modelo de datos llamado Person con una propiedad llamada Name, se haría referencia a este objeto como Person..Name.

Indefinidos

Los valores de ruta y propiedad pueden ser indefinidos. Esto es diferente a null. Un ejemplo de una propiedad indefinida es una propiedad de relación de registro que aún no se ha cargado. Una ruta de acceso como datasource.item.Name es indefinida si su última propiedad (Name) es indefinida, o si cualquiera de sus partes, como datasource o item son indefinidas o null. En general, App Maker trata valores indefinidos como null. Sin embargo, los widgets de entrada se inhabilitarán si sus valores se configuran como indefinidos. Por ejemplo, puedes usar la siguiente secuencia de comandos para borrar el valor de un cuadro de texto y, luego, inhabilitarlo:

textBox.value = undefined;
    

Situación de ejemplo

En este ejemplo, se ilustran dos propiedades complejas: Person y Address. Cada una de ellas es un tipo especial que puedes definir en un modelo que creas. No son tipos integrados de App Maker.

Person
Nombre de la propiedadTipo
Namestring
Agenúmero
Addressdirección
Address
Nombre de la propiedadTipo
Streetstring
Citystring
Zipstring

Debido a que la propiedad Address de Person es de tipo dirección, puedes usar la notación de ruta de acceso para hacer referencia a la ubicación de una persona con Person..Address.City.

Vinculaciones

Una vinculación es un mecanismo que permite mantener dos propiedades sincronizadas. Como autor en App Maker, a menudo declararás que deseas dos propiedades, como el valor de entrada de texto y un campo de registro, vinculadas. App Maker mantendrá las propiedades sincronizadas automáticamente: cuando una propiedad cambia, la otra se establece.

Todas las propiedades en App Maker son observables. Esto significa que es posible detectar los cambios en una propiedad. Cuando se realiza una vinculación entre dos propiedades, la vinculación observa, o detecta, los cambios en cada propiedad, y cuando una cambia, la otra se actualiza.

Un ejemplo de vinculación común en App Maker es vincular el valor de una entrada de texto a la propiedad del elemento de una fuente de datos. Esta vinculación se realiza mediante el editor de propiedades de App Maker, pero si escribiéramos la vinculación, se vería de la siguiente manera:

@widget.text <-> @datasource.item.MyField
    

Conversor de tipos para valores vinculados

Una propiedad tiene un tipo y un valor. El valor también tiene un tipo, que debe coincidir con el valor de su propiedad. Por ejemplo, la propiedad Name de un widget es un tipo de string. Debido a esto, los valores de los nombres son strings y no se pueden tratar como números enteros.

Si deseas vincular dos propiedades, estas deben tener el mismo tipo, o sus valores deben poder convertirse de un tipo en otro. Esto se llama conversión de tipo.

Por ejemplo, si asignas un valor de ""6"" a la propiedad Name de un widget, a este valor de ""6"" se lo trata como una string, no como un número. Podrías vincular esta propiedad a otra que sea de tipo de número entero, y el conversor de tipos integrado de App Maker intentará convertir los tipos de valores entre estas dos propiedades.

App Maker incluye muchas conversiones de tipo integradas, de modo que la mayoría de las vinculaciones funcionarán. Los conversores trabajan en ambas direcciones y hacen todo lo posible por convertir un valor de un tipo en otro.

DeACondiciones
stringnúmeroSolo si de se puede analizar como un número.
stringbooleanoSolo si de es “true” o “false” (no distingue mayúsculas y minúsculas).
stringfechaSolo si de es una fecha en formato AAAA-MM-DD.
númerobooleanoEl cero se convierte en falso y cualquier otro valor en verdadero
Arreglo<A>Arreglo<B>Siempre que A y B sean compatibles.

Transformadores

A veces, deseas vincular dos propiedades con alguna conversión de datos personalizada. Por ejemplo, deseas vincular un campo de un registro con un campo de texto en la IU, pero quieres que la entrada del usuario no tenga espacios en blanco antes de guardarla en la base de datos. O bien, deseas convertir una fecha en una string con un patrón de fecha diferente del que usa de manera predeterminada la conversión de tipos de App Maker. Los transformadores te permiten especificar transformaciones en las rutas de acceso de la propiedad. Cada transformador toma un valor de entrada y produce un valor de salida, y la mayoría de los transformadores también pueden tomar valores de salida y convertirlos de nuevo en valores de entrada. Estas transformaciones se pueden encadenar juntas. Por ejemplo, para que no haya espacios en blanco de las entradas y salidas de la ruta de acceso de una string, puedes vincular la propiedad value de un campo de texto al campo Name de un registro de fuente de datos:

@value <-> @datasource.item.Name#trim()
    

O bien, de otro modo, puedes especificar la fecha personalizada para el formato de string cuando vinculas una propiedad value de campo de texto con un campo de fecha timestamp en la base de datos como en el caso siguiente:

@value <--> @datasource.item.TimeStamp#formatDate('yyyy/MM/dd HH:mm:ss');
    

Los transformadores se pueden encadenar juntos de la manera siguiente:

@value <-> @datasource.item.Name#nullToEmpty()#trim()
    

Puedes encontrar una lista de todos los transformadores integrados aquí.

Los transformadores también se pueden aplicar a elementos de un arreglo, en lugar de al arreglo en sí. Por ejemplo, si propagas una propiedad name del widget desplegable con elementos de una proyección. La sintaxis es la misma, pero usa dos marcas de hash en lugar de una.

@names <-> @datasources.items..TimeStamp##formatDate('yyyy/MM/dd HH:mm:ss')
    

Propiedades de nivel superior en vinculaciones

Cuando vinculas la propiedad de un objeto (como el nombre de un widget), usas el selector de vinculaciones para navegar por las propiedades disponibles. App Maker ajusta automáticamente las propiedades disponibles según el objeto desde el que realizas la vinculación. Esto simplifica el proceso de vinculación para ciertas propiedades comunes. Por ejemplo, si vinculas un valor para un widget de botón, el selector de vinculaciones se configura automáticamente de forma predeterminada en la propiedad datasource.item del widget, que suele contener campos de un modelo.

Sin embargo, puedes vincular un widget o cualquier otro objeto con un elemento diferente de las sugerencias proporcionadas automáticamente en el selector de vinculaciones. Para eso, es útil comprender las dos categorías generales de propiedades por las que puedes navegar cuando vinculas objetos en tu aplicación.

Propiedades globalmente disponibles

Puedes realizar una vinculación con cualquier propiedad de tu aplicación. Generalmente, se accede a estas propiedades a través del objeto app. Cuando se realiza la vinculación, todas las propiedades de los objetos app se clasifican y exponen para las vinculaciones. Consulta la documentación de la API del objeto de la aplicación para obtener una documentación detallada de todas las propiedades.

Propiedades disponibles para los widgets

Un widget se puede vincular a todas las propiedades del objeto app y a dos propiedades adicionales:

  • widget: el widget en sí
  • datasource: la fuente de datos del widget, que es el objeto más común para vincular a un widget. También está disponible como @widget.datasource, pero, para una mayor conveniencia, datasource se muestra en el selector de vinculaciones en el editor de la IU.

Expresiones de vinculación

A veces, vincular dos propiedades no es suficiente. Mediante el uso de expresiones en el editor de vinculaciones en la IU de App Maker, puedes combinar vinculaciones y JavaScript para transformar un valor al que realizas la vinculación. App Maker evalúa la expresión cada vez que una de las propiedades utilizadas en la expresión cambia. Nota: Esto hace que la vinculación sea unidireccional.

Por ejemplo, imagina que tienes un botón Borrar llamado MyDeleteButton y deseas crear una vinculación a fin de que el botón se inhabilite si no hay un registro para borrar en la base de datos. Sin embargo, no hay propiedades que representen directamente ese concepto. Tenemos la propiedad enabled y la propiedad @datasource.item, y sabemos que si no hay un elemento, el valor del elemento es null. Entonces, con esta información podemos hacer la siguiente vinculación:

@widget.enabled <-> @datasource.item != null
    

y el botón solo se habilitará cuando haya un registro.

Recursos adicionales

Para obtener más información sobre la creación de expresiones de vinculaciones, consulta las secciones Expresiones de vinculaciones y Secuencias de comandos del cliente. Si deseas obtener información sobre todas las propiedades y los métodos disponibles para los widgets y objetos de cliente, consulta la API de widgets y la API de cliente.