Skip to content

LIST

El componente LIST renderiza una colección de registros utilizando una plantilla HTML personalizable que se repite para cada registro.

Se utiliza para mostrar datos en diseños flexibles basados en tarjetas, como feeds de actividades, listados de productos o dashboards.

Componente padre

List solo puede existir a nivel de página (no dentro de otros componentes).

text
PAGE
 └─ LIST
     └─ BUTTON (cero o más)

Propiedades

PropiedadTipoRequeridoValor predeterminadoDescripción
typestringDebe ser LIST
namestringIdentificador del componente y nombre de variable
sourcestringNoNombre de la variable que contiene el ResultSet. Si no se especifica, usa el nombre del componente
itemTemplatestringPlantilla HTML renderizada para cada registro. Soporta expresiones Handlebars
itemTemplateNamestringNoNombre de una plantilla global registrada en el sistema
bindsstringNoDefinición de bindings cuando se usa itemTemplateName
containerCssClassstringNo""Clases CSS para el contenedor externo
containerCssStylestringNo""Estilos CSS para el contenedor externo
cssClassstringNo""Clases CSS para el wrapper de la lista
cssStylestringNo""Estilos CSS para el wrapper de la lista
visiblebooleanNotrueIndica si el componente es visible

Expresiones Handlebars

La propiedad itemTemplate permite expresiones Handlebars.

Para insertar el valor del campo del registro actual utilizar {{fieldName}}

Esto sirve también para variables: {{varName}}

En el caso que se necesite mostrar el valor de una variable que tiene el mismo nombre que un campo de la fuente de datos prefijar con var. el nombre de la variable: {{var.varName}}

Para insertar un botón que está definido como hijo del componente:

{{button 'buttonName'}}

Ejemplos

Ejemplo 1: campo del registro actual

yaml
- type: LIST
    name: customersList
    source: customers
    itemTemplate: |
        <div class="list-group-item">
            <strong>{{customerName}}</strong>
            <div>{{customerEmail}}</div>
        </div>

customerName y customerEmail se leen de la fila actual del ResultSet customers.

Ejemplo 2: variable global

yaml
- type: LIST
    name: ordersList
    source: orders
    itemTemplate: |
        <div class="list-group-item">
            <div>Moneda: {{currencySymbol}}</div>
            <div>Total: {{orderTotal}}</div>
        </div>

currencySymbol puede ser una variable global cargada desde Lua, compartida por toda la página.

Ejemplo 3: conflicto de nombre campo vs variable

Si existe un campo status en el ResultSet y también una variable global status, usar var. para referirse a la variable:

yaml
- type: LIST
    name: ticketsList
    source: tickets
    itemTemplate: |
        <div class="list-group-item">
            <div>Estado del registro: {{status}}</div>
            <div>Filtro activo: {{var.status}}</div>
        </div>

Ejemplo 4: botón hijo dentro del template

yaml
- type: LIST
    name: productsList
    source: products
    itemTemplate: |
        <div class="list-group-item d-flex justify-content-between align-items-center">
            <span>{{productName}}</span>
            {{button 'editProduct'}}
        </div>
    children:
        - type: BUTTON
            name: editProduct
            text: Editar
            onClick: "@INCLUDE(events.lua, editProductOnClick)"

{{button 'editProduct'}} renderiza el botón hijo definido dentro del componente LIST.