Bij adaptieve formulieren wordt het weergaveframework gebruikt om u te helpen aangepaste weergaven te maken voor adaptieve formuliervelden en een andere gebruikerservaring te bieden. Vervang bijvoorbeeld keuzerondjes en selectievakjes door schakelknoppen of gebruik aangepaste jQuery-plug-ins om gebruikersinvoer in velden zoals telefoonnummers of e-mailadressen te beperken.
In dit document wordt uitgelegd hoe u met een jQuery-insteekmodule deze alternatieve ervaringen voor adaptieve formuliervelden kunt maken. Daarnaast wordt een voorbeeld weergegeven voor het maken van een aangepaste weergave voor numerieke veldcomponenten die worden weergegeven als een numerieke stapfunctie of schuifregelaar.
Laten we eerst kijken naar de belangrijkste termen en concepten die in dit artikel worden gebruikt.
VormgevingVerwijst naar de stijl, vormgeving en organisatie van verschillende elementen van een adaptief formulierveld. Het omvat gewoonlijk een etiket, een interactief gebied om input, een hulppictogram, en korte en lange beschrijvingen van het gebied te verstrekken. De aanpassing van de weergave die in dit artikel wordt besproken, is van toepassing op de weergave van het invoergebied van het veld.
jQuery- insteekmoduleBiedt een standaardmechanisme op basis van het jQuery-widgetframework voor het implementeren van een alternatieve weergave.
ClientLibA client-side bibliotheeksysteem in AEM client-side verwerking aangedreven door complexe JavaScript- en CSS-code. Zie Client-Side Libraries gebruiken voor meer informatie.
Toolkit ArchetypeA Maven project templating defined as an original pattern or model for Maven projects. Voor meer informatie, zie Inleiding aan Archetypes.
User ControlReference to the main element in a widget that contains the value of the field, and is used by the appearance framework for binding the custom widget UI with the adaptive form model.
Op hoog niveau zijn de volgende stappen nodig om een aangepaste weergave te maken:
Een project maken: Creeer een Geweven project dat een inhoudspakket om op AEM produceert op te stellen.
Een bestaande widgetklasse uitbreiden: Een bestaande widgetklasse uitbreiden en de vereiste klassen overschrijven.
Een clientbibliotheek maken: Maak een clientLib: af.customwidget
bibliotheek en voeg de vereiste JavaScript- en CSS-bestanden toe.
Het project bouwen en installeren: Bouw het Maven project en installeer het geproduceerde inhoudspakket op AEM.
Het aangepaste formulier bijwerken: Pas de eigenschappen van formuliervelden aan om de aangepaste weergave te gebruiken.
Een bepaald archetype is een uitgangspunt voor het creëren van een douaneverschijning. De details van het te gebruiken archetype zijn als volgt:
Voer het volgende bevel uit om een lokaal project tot stand te brengen dat op archetype wordt gebaseerd:
mvn archetype:generate -DarchetypeRepository=https://repo.adobe.com/nexus/content/groups/public/ -DarchetypeGroupId=com.adobe.aemforms -DarchetypeArtifactId=custom-appearance-archetype -DarchetypeVersion=1.0.4
De opdracht downloadt de Maven-plug-ins en archetype-informatie van de opslagplaats en genereert een project op basis van de volgende informatie:
Het gegenereerde project heeft de volgende structuur:
─<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
Zodra het projectmalplaatje wordt gecreeerd, doe de volgende veranderingen, zoals vereist:
Neem de afhankelijkheid van de externe plug-in van het project op.
jqueryplugin/javascript
en de bijbehorende CSS-bestanden in de map jqueryplugin/css
. Zie de JS- en CSS-bestanden in de map jqueryplugin/javascript and jqueryplugin/css
voor meer informatie.js.txt
- en css.txt
-bestanden om extra JavaScript- en CSS-bestanden van de jQuery-insteekmodule op te nemen.Integreer de externe insteekmodule met het framework om interactie mogelijk te maken tussen het aangepaste weergaveframework en de jQuery-insteekmodule. De nieuwe widget werkt alleen nadat u de volgende functies hebt uitgebreid of genegeerd.
-functie | Beschrijving |
render |
De renderfunctie retourneert het jQuery-object voor het standaard HTML-element van de widget. Het standaard-HTML-element moet van het brandpunttype zijn. Bijvoorbeeld <a> , <input> en <li> . Het geretourneerde element wordt gebruikt als $userControl . Als de $userControl de bovenstaande beperking specificeert, werken de functies van de AbstractWidget klasse zoals verwacht, anders sommige gemeenschappelijke APIs (nadruk, klik) vereisen veranderingen. |
getEventMap |
Retourneert een kaart voor het converteren van HTML-gebeurtenissen naar XFA-gebeurtenissen. {
blur: XFA_EXIT_EVENT,
} In dit voorbeeld blur wordt getoond dat het een HTML-gebeurtenis XFA_EXIT_EVENT is en dat het de corresponderende XFA-gebeurtenis is. |
getOptionsMap |
Retourneert een kaart met details over de handeling die moet worden uitgevoerd bij de wijziging van een optie. De sleutels zijn de opties die aan widget worden verstrekt en de waarden zijn functies die worden geroepen wanneer een verandering in de optie wordt ontdekt. De widget biedt handlers voor alle algemene opties (behalve value en displayValue ). |
getCommitValue |
Het jQuery-widgetframework laadt de functie wanneer de waarde van de jQuery-widget in het XFA-model wordt opgeslagen (bijvoorbeeld bij afsluitgebeurtenis van een tekstveld). De implementatie moet de waarde retourneren die is opgeslagen in de widget. De handler krijgt de nieuwe waarde voor de optie. |
showValue |
Standaard wordt in XFA bij Enter de rawValue van het veld weergegeven. Deze functie wordt geroepen om rawValue aan de gebruiker te tonen. |
showDisplayValue |
Standaard wordt in XFA bij afsluitgebeurtenis formattedValue van het veld weergegeven. Deze functie wordt geroepen om formattedValue aan de gebruiker te tonen. |
Werk het JavaScript-bestand naar wens bij in de map integration/javascript
.
__widgetName__
door de daadwerkelijke widgetnaam.xfaWidget.textField
in het bestand en deze te vervangen door de werkelijk gebruikte bovenliggende klasse.render
methode uit om een afwisselende UI te verstrekken. Dit is de locatie vanwaar de jQuery-insteekmodule wordt aangeroepen om de gebruikersinterface of het interactiegedrag bij te werken. De render
methode zou een user-control element moeten terugkeren.getOptionsMap
methode uit om het even welke optie met voeten te treden die als toe te schrijven aan een verandering in widget wordt beïnvloed. De functie retourneert een toewijzing die details bevat voor de actie die moet worden uitgevoerd bij wijziging van een optie. De sleutels zijn de opties die aan widget worden verstrekt en de waarden zijn de functies die worden geroepen wanneer een verandering in de optie wordt ontdekt.getEventMap
wijst gebeurtenissen toe die door de widget worden geactiveerd, met de gebeurtenissen die door het adaptieve formuliermodel worden vereist. De standaardwaarde wijst standaard HTML-gebeurtenissen toe voor de standaardwidget en moet worden bijgewerkt als een alternatieve gebeurtenis wordt geactiveerd.showDisplayValue
en showValue
passen de weergave- en bewerkingsafbeeldingsvoorwaarde toe en kunnen worden overschreven voor een ander gedrag.getCommitValue
wordt aangeroepen door het adaptieve formulierframework wanneer de gebeurtenis commit
plaatsvindt. Over het algemeen is dit de afsluitgebeurtenis, behalve voor de vervolgkeuzelijst, het keuzerondje en de selectievakjes (waar deze voorkomt bij wijziging). Zie Aangepaste Forms-expressies voor meer informatie.Het voorbeeldproject dat door het Maven archetype wordt geproduceerd leidt automatisch tot vereiste cliëntbibliotheken, en verpakt hen in een cliëntbibliotheek met een categorie af.customwidgets
. De JavaScript- en CSS-bestanden die beschikbaar zijn in af.customwidgets
worden automatisch opgenomen bij uitvoering.
Om het project te bouwen, voer het volgende bevel op shell uit om een pakket te produceren CRX dat op de AEM server moet worden geïnstalleerd.
mvn clean install
Het beheerde project verwijst naar een externe opslagplaats binnen het POM-bestand. Dit is alleen ter referentie en volgens de Maven-standaarden wordt de opslagplaats-informatie vastgelegd in het settings.xml
-bestand.
De aangepaste weergave toepassen op een adaptief formulierveld:
CSS class
bij om de weergavenaam toe te voegen in de indeling widget_<widgetName>
. Bijvoorbeeld: widget_numericstepperBekijk nu een voorbeeld om een douaneverschijning voor een numeriek gebied tot stand te brengen om als numerieke stapper of schuif te verschijnen. Voer de volgende stappen uit:
Voer het volgende bevel uit om een lokaal project tot stand te brengen dat op Maven archetype wordt gebaseerd:
mvn archetype:generate -DarchetypeRepository=https://repo.adobe.com/nexus/content/groups/public/ -DarchetypeGroupId=com.adobe.aemforms -DarchetypeArtifactId=custom-appearance-archetype -DarchetypeVersion=1.0.4
U wordt gevraagd waarden op te geven voor de volgende parameters.
De in dit voorbeeld gebruikte waarden worden vet gemarkeerd.
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
Navigeer naar de map customWidgets
(opgegeven waarde voor de eigenschap artifactID
) en voer de volgende opdracht uit om een Eclipse-project te genereren:
mvn eclipse:eclipse
Open het gereedschap Eclipse en voer de volgende handelingen uit om het Eclipse-project te importeren:
Selecteer File > Import > Existing Projects into Workspace.
Blader en selecteer de map waarin u de opdracht archetype:generate
hebt uitgevoerd.
Klik op Finish.
Selecteer de widget die voor de aangepaste weergave moet worden gebruikt. In dit voorbeeld wordt de volgende numerieke stepper-widget gebruikt:
https://www.jqueryscript.net/form/User-Friendly-Number-Input-Spinner-with-jQuery-Bootstrap.html
Controleer in het Eclipse-project de insteekcode in het plugin.js
-bestand om te controleren of deze voldoet aan de vereisten voor de weergave. In dit voorbeeld voldoet de weergave aan de volgende vereisten:
- $.xfaWidget.numericInput
.set value
van de widget stelt de waarde in nadat de focus op het veld is geplaatst. Dit is een verplichte vereiste voor een adaptieve formulierwidget.render
methode moet worden met voeten getreden om de bootstrapNumber
methode aan te halen.$userControl
moet beschikbaar zijn voor de methode render
. Dit is een veld van het type text
dat met de insteekcode is gekloond.Vervang de inhoud van de bootstrap-number-input.js
(jQuery-insteekmodule) door de inhoud van het numericStepper-plugin.js
-bestand.
Voeg in het numericStepper-widget.js
-bestand de volgende code toe om de rendermethode te overschrijven om de insteekmodule aan te roepen en het $userControl
-object te retourneren:
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;
}
Overschrijf in het bestand numericStepper-widget.js
de eigenschap getOptionsMap
om de toegangsoptie te overschrijven en verberg de knoppen + en - in de uitgeschakelde modus.
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;
}
Sla de wijzigingen op, navigeer naar de map die het pom.xml
-bestand bevat en voer de volgende Maven-opdracht uit om het project te maken:
mvn clean install
Installeer het pakket met AEM Package Manager.
Open het adaptieve formulier in de bewerkingsmodus waarop u de aangepaste weergave wilt toepassen en voer de volgende handelingen uit:
Klik met de rechtermuisknop op het veld waarop u de weergave wilt toepassen en klik op Edit om het dialoogvenster Component bewerken te openen.
Werk op het tabblad Stijl de eigenschap CSS class bij om widget_numericStepper
toe te voegen.
De nieuwe weergave die u zojuist hebt gemaakt, is nu beschikbaar voor gebruik.