Los formularios adaptables aprovechan el marco de trabajo de apariencia para ayudarle a crear aspectos personalizados para campos de formulario adaptables y proporcionar una experiencia de usuario diferente. Por ejemplo, reemplace los botones de opción y las casillas de verificación con botones de alternancia o utilice complementos jQuery personalizados para restringir las entradas de los usuarios en campos como números de teléfono o ID de correo electrónico.
En este documento se explica cómo utilizar un complemento jQuery para crear estas experiencias alternativas para campos de formulario adaptables. Además, muestra un ejemplo para crear un aspecto personalizado para que el componente de campo numérico aparezca como un paso numérico o un control deslizante.
Veamos primero los términos y conceptos clave utilizados en este artículo.
Aspecto Se refiere al estilo, la apariencia y la organización de varios elementos de un campo de formulario adaptable. Normalmente incluye una etiqueta, un área interactiva para proporcionar entradas, un icono de ayuda y descripciones cortas y largas del campo. La personalización del aspecto que se describe en este artículo es aplicable al aspecto del área de entrada del campo.
Complemento jQuery Proporciona un mecanismo estándar, basado en el marco del widget jQuery, para implementar un aspecto alternativo.
ClientLib Un sistema de bibliotecas del lado del cliente en AEM procesamiento del lado del cliente impulsado por código CSS y JavaScript complejo. Para obtener más información, consulte Uso de bibliotecas del lado del cliente.
Tipo de archivo Conjunto de herramientas de creación de plantillas de proyecto de Maven definido como patrón o modelo original para los proyectos de Maven. Para obtener más información, consulte Introducción a los tipos de archivo.
Control de usuario Se refiere al elemento principal de una utilidad que contiene el valor del campo y se utiliza en la estructura de aspecto para enlazar la interfaz de usuario del widget personalizado con el modelo de formulario adaptable.
Los pasos, en un nivel superior, para crear un aspecto personalizado son los siguientes:
Crear un proyecto: Cree un proyecto de Maven que genere un paquete de contenido para implementarlo en AEM.
Ampliar una clase de utilidad existente: Amplíe una clase de widget existente y anule las clases requeridas.
Crear una biblioteca de cliente: Cree un clientLib: af.customwidget
y añada los archivos JavaScript y CSS necesarios.
Creación e instalación del proyecto: Cree el proyecto Maven e instale el paquete de contenido generado en AEM.
Actualizar el formulario adaptable: Actualice las propiedades del campo del formulario adaptable para utilizar el aspecto personalizado.
Un tipo de archivo maven es un punto de partida para crear un aspecto personalizado. Los detalles del tipo de archivo a utilizar son los siguientes:
Ejecute el siguiente comando para crear un proyecto local basado en el tipo de archivo:
mvn archetype:generate -DarchetypeRepository=https://repo.adobe.com/nexus/content/groups/public/ -DarchetypeGroupId=com.adobe.aemforms -DarchetypeArtifactId=custom-appearance-archetype -DarchetypeVersion=1.0.4
El comando descarga los complementos de Maven y la información del tipo de archivo desde el repositorio y genera un proyecto basado en la siguiente información:
El proyecto generado tiene la siguiente estructura:
─<artifactId>
└───src
└───main
└───content
└───jcr_root
└───etc
└───clientlibs
└───custom
└───<widgetName>
├───common [client library - af.customwidgets which encapsulates below clientLibs]
├───integration [client library - af.customwidgets.<widgetName>_widget which contains template files for integrating a third-party plugin with Adaptive Forms]
│ ├───css
│ └───javascript
└───jqueryplugin [client library - af.customwidgets.<widgetName>_plugin which holds the third-party plugins and related dependencies]
├───css
└───javascript
Una vez creada la plantilla del proyecto, realice los cambios siguientes según sea necesario:
Incluya la dependencia del complemento de terceros al proyecto.
jqueryplugin/javascript
carpeta y archivos CSS relacionados en la jqueryplugin/css
carpeta. Para obtener más información, consulte los archivos JS y CSS en la sección jqueryplugin/javascript and jqueryplugin/css
carpeta.js.txt
y css.txt
para incluir cualquier archivo JavaScript y CSS adicional del complemento jQuery.Integre el complemento de terceros con el marco para permitir la interacción entre el marco de aspecto personalizado y el complemento jQuery. El nuevo widget solo funcionará después de ampliar o anular las siguientes funciones.
Función | Descripción |
render |
La función render devuelve el objeto jQuery para el elemento HTML predeterminado del widget. El elemento HTML predeterminado debe ser de tipo enfocable. Por ejemplo, <a> , <input> y <li> . El elemento devuelto se usa como $userControl . Si la variable $userControl especifica la restricción anterior, las funciones del AbstractWidget funciona como se espera, de lo contrario, algunas de las API comunes (enfoque, clic) requieren cambios. |
getEventMap |
Devuelve un mapa para convertir eventos de HTML en eventos XFA. {
blur: XFA_EXIT_EVENT,
} Este ejemplo muestra que blur es un evento de HTML y XFA_EXIT_EVENT es el evento XFA correspondiente. |
getOptionsMap |
Devuelve un mapa que proporciona detalles sobre la acción que se va a realizar al cambiar una opción. Las claves son las opciones que se proporcionan al widget y los valores son funciones a las que se llama cada vez que se detecta un cambio en la opción. La utilidad proporciona controladores para todas las opciones comunes (excepto value y displayValue ). |
getCommitValue |
El marco del widget jQuery carga la función siempre que el valor del widget jQuery se guarda en el modelo XFA (por ejemplo, en el suceso exit de un campo de texto). La implementación debe devolver el valor guardado en el widget. El controlador se proporciona con el nuevo valor para la opción . |
showValue |
De forma predeterminada, en XFA en el evento enter , la variable rawValue del campo . Esta función se llama para mostrar la variable rawValue al usuario. |
showDisplayValue |
De forma predeterminada, en XFA en el evento de salida, la variable formattedValue del campo . Esta función se llama para mostrar la variable formattedValue al usuario. |
Actualice el archivo JavaScript en la sección integration/javascript
, según sea necesario.
__widgetName__
con el nombre real del widget.xfaWidget.textField
en el archivo y sustitúyalo por la clase principal real utilizada.render
para proporcionar una interfaz de usuario alternativa. Es la ubicación desde la que se invocará el complemento jQuery para actualizar la interfaz de usuario o el comportamiento de la interacción. La variable render
debe devolver un elemento de control de usuario.getOptionsMap
para anular cualquier configuración de opción afectada por un cambio en el widget. La función devuelve una asignación que proporciona detalles para que la acción se realice al cambiar una opción. Las claves son las opciones proporcionadas al widget y los valores son las funciones a las que se llama cada vez que se detecta un cambio en la opción.getEventMap
asigna los eventos activados por el widget, con los eventos requeridos por el modelo de formulario adaptable. El valor predeterminado asigna eventos de HTML estándar para el widget predeterminado y debe actualizarse si se activa un evento alternativo.showDisplayValue
y showValue
aplique la cláusula de visualización y edición de imagen y se puede sobrescribir para que tenga un comportamiento alternativo.getCommitValue
es invocado por el marco de formularios adaptables cuando commit
se produce. Generalmente, es el evento de salida, excepto para los elementos de lista desplegable, botón de radio y casilla de verificación donde se produce al cambiar). Para obtener más información, consulte Expresiones adaptables de Forms.El proyecto de ejemplo generado por el tipo de archivo Maven crea automáticamente las bibliotecas de cliente necesarias y las envuelve en una biblioteca de cliente con una categoría af.customwidgets
. Los archivos JavaScript y CSS disponibles en la variable af.customwidgets
se incluyen automáticamente durante la ejecución.
Para crear el proyecto, ejecute el siguiente comando en el shell para generar un paquete CRX que necesite ser instalado en el servidor de AEM.
mvn clean install
El proyecto maven hace referencia a un repositorio remoto dentro del archivo POM. Esto es solo para fines de referencia y según los estándares Maven, la información del repositorio se captura en la variable settings.xml
archivo.
Para aplicar el aspecto personalizado a un campo de formulario adaptable:
CSS class
para agregar el nombre del aspecto en la variable widget_<widgetName>
formato. Por ejemplo: widget_numericstepVeamos un ejemplo para crear un aspecto personalizado para que un campo numérico aparezca como un paso numérico o un control deslizante. Siga estos pasos:
Ejecute el siguiente comando para crear un proyecto local basado en el tipo de archivo Maven:
mvn archetype:generate -DarchetypeRepository=https://repo.adobe.com/nexus/content/groups/public/ -DarchetypeGroupId=com.adobe.aemforms -DarchetypeArtifactId=custom-appearance-archetype -DarchetypeVersion=1.0.4
Le solicita que especifique valores para los siguientes parámetros.
Los valores utilizados en esta muestra se resaltan en negrita.
Define value for property 'groupId': com.adobe.afwidgets
Define value for property 'artifactId': customWidgets
Define value for property 'version': 1.0.1-SNAPSHOT
Define value for property 'package': com.adobe.afwidgets
Define value for property 'artifactName': customWidgets
Define value for property 'packageGroup': adobe/customWidgets
Define value for property 'widgetName': numericStepper
Vaya a la customWidgets
(valor especificado para la variable artifactID
) y ejecute el siguiente comando para generar un proyecto Eclipse:
mvn eclipse:eclipse
Abra la herramienta Eclipse y haga lo siguiente para importar el proyecto Eclipse:
Select Archivo > Importar > Proyectos existentes en Workspace.
Busque y seleccione la carpeta en la que ejecutó la archetype:generate
comando.
Haga clic en Finalizar.
Seleccione el widget que se utilizará para el aspecto personalizado. Este ejemplo utiliza el siguiente widget de pasos numéricos:
https://www.jqueryscript.net/form/User-Friendly-Number-Input-Spinner-with-jQuery-Bootstrap.html
En el proyecto Eclipse, revise el código del complemento en la plugin.js
para asegurarse de que coincide con los requisitos del aspecto. En este ejemplo, el aspecto visual cumple los siguientes requisitos:
- $.xfaWidget.numericInput
.set value
del widget define el valor después de que el foco esté en el campo. Es un requisito obligatorio para un widget de formulario adaptable.render
debe anularse para invocar el método bootstrapNumber
método.$userControl
debe estar disponible para el render
método. Es un campo del text
tipo que se clona con el código del complemento.Reemplace el contenido del bootstrap-number-input.js
(Complemento jQuery) con el contenido del numericStepper-plugin.js
archivo.
En el numericStepper-widget.js
, añada el siguiente código para anular el método render para invocar el complemento y devolver el $userControl
objeto:
render : function() {
var control = $.xfaWidget.numericInput.prototype.render.apply(this, arguments);
var $control = $(control);
var controlObject;
try{
if($control){
$control.bootstrapNumber();
var id = $control.attr("id");
controlObject = $("#"+id);
}
}catch (exc){
console.log(exc);
}
return controlObject;
}
En el numericStepper-widget.js
, omita el getOptionsMap
para anular la opción de acceso y ocultar los botones + y - en modo desactivado.
getOptionsMap: function(){
var parentOptionsMap = $.xfaWidget.numericInput.prototype.getOptionsMap.apply(this,arguments),
newMap = $.extend({},parentOptionsMap,
{
"access": function(val) {
switch(val) {
case "open" :
this.$userControl.removeAttr("readOnly");
this.$userControl.removeAttr("aria-readonly");
this.$userControl.removeAttr("disabled");
this.$userControl.removeAttr("aria-disabled");
this.$userControl.parent().find(".input-group-btn button").prop('disabled',false);
break;
case "nonInteractive" :
case "protected" :
this.$userControl.attr("disabled", "disabled");
this.$userControl.attr("aria-disabled", "true");
this.$userControl.parent().find(".input-group-btn button").prop('disabled',true);
break;
case "readOnly" :
this.$userControl.attr("readOnly", "readOnly");
this.$userControl.attr("aria-readonly", "true");
this.$userControl.parent().find(".input-group-btn button").prop('disabled',true);
break;
default :
this.$userControl.removeAttr("disabled");
this.$userControl.removeAttr("aria-disabled");
this.$userControl.parent().find(".input-group-btn button").prop('disabled',false);
break;
}
},
});
return newMap;
}
Guarde los cambios, vaya a la carpeta que contiene el pom.xml
y ejecute el siguiente comando Maven para crear el proyecto:
mvn clean install
Instale el paquete mediante AEM Administrador de paquetes.
Abra el formulario adaptable en modo de edición en el que desee aplicar el aspecto personalizado y haga lo siguiente:
Haga clic con el botón derecho en el campo en el que desee aplicar la apariencia y haga clic en Editar para abrir el cuadro de diálogo Editar componente.
En la pestaña Estilo , actualice la variable Clase CSS propiedad para agregar widget_numericStepper
.
La nueva apariencia que acaba de crear ya está disponible para su uso.