Propiedades del campo de bloque de Forms adaptable

Este documento resume cómo se asigna el esquema JSON a HTML procesado en blocks/form/form.js, centrándose en cómo se identifican y procesan los campos, los patrones comunes y las diferencias específicas de los campos.

¿Cómo Se Identifican Los Campos (fieldType)?

Cada campo del esquema JSON tiene una propiedad fieldType que determina cómo se procesa. El(la) fieldType puede ser:

  • Un tipo especial
    Ejemplos: drop-down, radio-group, checkbox-group, panel, plain-text, image, heading, etc.
  • Un tipo de entrada de HTML válido
    Ejemplos: text, number, email, date, password, tel, range, file, etc.
  • Un tipo con -input sufijo
    Ejemplos: text-input, number-input, etc. (normalizado para el tipo base como text, number).

Si fieldType coincide con un tipo especial, se utiliza un procesador personalizado. De lo contrario, se trata como un tipo de entrada predeterminado.

Consulte las secciones siguientes para ver la estructura y propiedades completas de HTML para cada tipo de campo.

Propiedades comunes utilizadas por los campos

A continuación, se muestran las propiedades utilizadas por la mayoría de los campos:

  • id: especifica el ID de elemento y admite la accesibilidad.
  • name: define el atributo name para los elementos input, select o fieldset.
  • label.value, label.richText, label.visible: especifica el texto de etiqueta/leyenda, el contenido de HTML y la visibilidad.
  • value: representa el valor actual del campo.
  • required: agrega el atributo required para los datos de validación.
  • readOnly, enabled: controla si el campo es editable o deshabilitado.
  • description: muestra el texto de ayuda debajo del campo.
  • tooltip: establece el atributo title para las entradas.
  • constraintMessages: proporciona mensajes de error personalizados como atributos de datos.

Estructura común de HTML

La mayoría de los campos se representan dentro de un contenedor que incluye una etiqueta y texto de ayuda opcional. El siguiente fragmento muestra la estructura:

<div class="<fieldType>-wrapper field-wrapper field-<name>" data-id="<id>">
<label for="<id>" class="field-label">Label</label>
<!-- Field-specific input/element here -->
<div class="field-description" id="<id>-description">Description or error
message</div>
</div>

Para grupos (radio/casilla de verificación) y paneles, se utiliza un <fieldset> con un <legend> en lugar de un <div>/<label>. El texto de ayuda

solo está presente si se ha definido una descripción.

Visualización del mensaje de error

Los mensajes de error se muestran en el mismo elemento .field-description utilizado para el texto de ayuda, que se actualiza dinámicamente.

Cuando un campo no es válido:

Cuando el campo se vuelve válido:

Los mensajes de error personalizados se pueden definir usando la propiedad constraintMessages en el JSON.
Se agregan como atributos data-<constraint>ErrorMessage en el contenedor (por ejemplo, data-requiredErrorMessage).

Tipos de entrada predeterminados (entrada HTML o *-input)

Si fieldType no es un tipo especial, se trata como un tipo de entrada de HTML estándar o como <type>-input, por ejemplo, text, number, email, date, text-input, number-input.

Restricciones para tipos de entrada predeterminados

Las restricciones se agregan como atributos en el elemento de entrada en función de las propiedades JSON.

Propiedad JSON
Atributo HTML
Aplicable a
maxLength
longitud máxima
texto, correo electrónico, contraseña, teléfono
minLength
minlength
texto, correo electrónico, contraseña, teléfono
patrón
patrón
texto, correo electrónico, contraseña, teléfono
maximum
máx.
número, intervalo, fecha
minimum
min
número, intervalo, fecha
escalón
escalón
número, intervalo, fecha
aceptar
aceptar
archivo
múltiple
múltiple
archivo
maxOccur
data-max
panel
minOccur
data-min
panel
NOTE
multiple es una propiedad booleana. Si es true, se agrega el atributo multiple.

Estos atributos los establece automáticamente el procesador de formularios en función de la definición JSON del campo.

Ejemplo: Estructura de HTML con restricciones

En el siguiente ejemplo se muestra cómo se representa un campo numérico con restricciones de validación y atributos de control de errores.

<div class="number-wrapper field-wrapper field-age" data-id="age"
data-required="true"
data-minimumErrorMessage="Too small" data-maximumErrorMessage="Too large">
<label for="age" class="field-label">Age</label>
<input type="number"
id="age" name="age"
value="30" required min="18"
max="99" step="1"
placeholder="Enter your age" />
<div class="field-description" id="age-description"> Description or error message
</div>
</div>

Cada parte de la estructura de HTML desempeña un papel en el enlace de datos, la validación y la visualización de los mensajes de ayuda o error.

Propiedades específicas de los campos y sus estructuras HTML

Lista desplegable

Propiedades adicionales:

Ejemplo:

<div class="drop-down-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true"
data-requiredErrorMessage="This field is required">
<label for="<id>" class="field-label">Label</label>
<select id="<id>" name="<name>" required title="Tooltip" multiple>
<option disabled selected value="">Placeholder</option>
<option value="opt1">Option 1</option>
<option value="opt2">Option 2</option>
</select>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Texto sin formato

Propiedades adicionales:

Ejemplo:

<div class="plain-text-wrapper field-wrapper field-<name>" data-id="<id>">
<label for="<id>" class="field-label">Label</label>
<p>Text or <a href="..." target="_blank">link</a></p>
</div>

Casilla de verificación

Propiedades adicionales:

Ejemplo:

<div class="checkbox-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true"
data-requiredErrorMessage="Please check this box">
<label for="<id>" class="field-label">Label</label>
<input type="checkbox"
id="<id>"
name="<name>" value="on"
required
data-unchecked-value="off" />
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Botón

Propiedades adicionales:

Ejemplo:

<div class="button-wrapper field-wrapper field-<name>" data-id="<id>">
<button id="<id>" name="<name>" type="submit" class="button"> Label
</button>
</div>

Entrada multilínea

Propiedades adicionales:

Ejemplo:

<div class="multiline-wrapper field-wrapper field-<name>" data-id="<id>"
data-minLengthErrorMessage="Too short" data-maxLengthErrorMessage="Too long">
<label for="<id>" class="field-label">Label</label>
<textarea id="<id>"
name="<name>" required
minlength="2"
maxlength="100"
pattern="[A-Za-z]+"
placeholder="Type here..."></textarea>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Panel

Propiedades adicionales:

Ejemplo:

<fieldset class="panel-wrapper field-wrapper field-<name>" data-id="<id>"
name="<name>"
data-repeatable="true" data-index="0">
<legend class="field-label">Label</legend>
<!-- Nested fields here -->
<button type="button" class="add">Add</button>
<button type="button" class="remove">Remove</button>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Opciones

Propiedades adicionales:

Ejemplo:

<div class="radio-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true">
<label for="<id>" class="field-label">Label</label>
<input type="radio" id="<id>" name="<name>" value="opt1" required />
<div class="field-description" id="<id>-description"> Description or error message
</div>
</div>

Grupo de opciones

Propiedades adicionales:

Ejemplo:

<fieldset class="radio-group-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true">
<legend class="field-label">Label</legend>
<div>
<input type="radio" id="<id>-0" name="<name>" value="opt1" required />
<label for="<id>-0">Option 1</label>
</div>
<div>
<input type="radio" id="<id>-1" name="<name>" value="opt2" />
<label for="<id>-1">Option 2</label>
</div>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Grupo de casillas de verificación

Propiedades adicionales:

Ejemplo:

<fieldset class="checkbox-group-wrapper field-wrapper field-<name>" data-id="<id>"
data-required="true" data-minItems="1"
data-maxItems="3">
<legend class="field-label">Label</legend>
<div>
<input type="checkbox" id="<id>-0" name="<name>" value="opt1" required />
<label for="<id>-0">Option 1</label>
</div>
<div>
<input type="checkbox" id="<id>-1" name="<name>" value="opt2" />
<label for="<id>-1">Option 2</label>
</div>
<div class="field-description" id="<id>-description"> Description or error message
</div>
</fieldset>

Imagen

Propiedades adicionales:

Ejemplo:

<div class="image-wrapper field-wrapper field-<name>" data-id="<id>">
<picture>
<img src="..." alt="..." />
<!-- Optimized sources -->
</picture>
</div>

Encabezado

Propiedades adicionales:

Ejemplo:

<div class="heading-wrapper field-wrapper field-<name>" data-id="<id>">
<h2 id="<id>">Heading Text</h2>
</div>

Para obtener más información, vea la implementación en blocks/form/form.js y blocks/form/util.js.

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab