Aangepaste weergaven maken voor adaptieve formuliervelden create-custom-appearances-for-adaptive-form-fields
Inleiding introduction
De adaptieve vormen gebruiken het verschijningskader om u te helpen douaneverschijningen voor adaptieve vormgebieden tot stand brengen en een verschillende gebruikerservaring verstrekken. 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.
Verschijning verwijst naar de stijl, de blik en het gevoel, en de organisatie van diverse elementen van een adaptief vormgebied. 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 plugin verstrekt een standaardmechanisme, dat op het kader van jQuery widget wordt gebaseerd, om een afwisselende verschijning uit te voeren.
ClientLib een cliënt-zijbibliotheeksysteem in AEM cliënt-zijverwerking die door complexe JavaScript en CSS code wordt gedreven. Zie Client-Side Libraries gebruiken voor meer informatie.
Archetype Een Maven toolkit van de projectemplating die als origineel patroon of model voor Gemaakt projecten wordt bepaald. Voor meer informatie, zie Inleiding aan Archetypes.
Controle van de Gebruiker verwijst naar het belangrijkste element in een widget die de waarde van het gebied bevat, en door het vormgevingskader wordt gebruikt om douane widget UI met het adaptieve vormmodel te binden.
Stappen om een aangepaste weergave te maken steps-to-create-a-custom-appearance
Op hoog niveau zijn de volgende stappen nodig om een aangepaste weergave te maken:
-
creeer een project: Creeer een Gemaakt project dat een inhoudspakket produceert om op AEM op te stellen.
-
breid een bestaande widgetklasse uit: breid een bestaande widgetklasse uit en treedt de vereiste klassen met voeten.
-
creeer een cliëntbibliotheek: Creeer a
clientLib: af.customwidgetbibliotheek en voeg de vereiste JavaScript en CSS dossiers toe. -
bouwt en installeert het project: Bouw het Gemaakt project en installeer het geproduceerde inhoudspakket op AEM.
-
werk de adaptieve vorm bij: Werk de adaptieve eigenschappen van het vormgebied bij om de douaneverschijning te gebruiken.
Een project maken create-a-project
Een bepaald archetype is een uitgangspunt voor het creëren van een douaneverschijning. De details van het te gebruiken archetype zijn als volgt:
- Bewaarplaats: https://repo1.maven.org/maven2/com/adobe/
- Identiteitskaart van Artefact: douane-verschijning-archetype
- Identiteitskaart van de Groep: com.adobe.aemforms
- Versie: 1.0.4
Voer het volgende bevel uit om een lokaal project tot stand te brengen dat op archetype wordt gebaseerd:
mvn archetype:generate -DarchetypeRepository=https://repo1.maven.org/maven2/com/adobe/ -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:
- groupId: Identiteitskaart van de groep die door het geproduceerde Gemaakt project wordt gebruikt
- artifactId: Artefactidentiteitskaart die door het geproduceerde Geweven project wordt gebruikt.
- versie: Versie voor het geproduceerde Gemaakt project.
- pakket: Pakket gebruikt voor de dossierstructuur.
- artifactName: Artefactnaam van het geproduceerde AEM pakket.
- packageGroup: De groep van het pakket van het geproduceerde AEM pakket.
- widgetName: Naam van de verschijning die voor verwijzing wordt gebruikt.
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
Een bestaande widgetklasse uitbreiden extend-an-existing-widget-class
Zodra het projectmalplaatje wordt gecreeerd, doe de volgende veranderingen, zoals vereist:
-
Neem de afhankelijkheid van de externe plug-in van het project op.
-
Plaats de externe of aangepaste jQuery-plug-ins in de map
jqueryplugin/javascripten de bijbehorende CSS-bestanden in de mapjqueryplugin/css. Zie de JS- en CSS-bestanden in de mapjqueryplugin/javascript and jqueryplugin/cssvoor meer informatie. -
Wijzig de
js.txt- encss.txt-bestanden om eventuele 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.
-
Werk het JavaScript-bestand naar wens bij in de map
integration/javascript.-
Vervang de tekst
__widgetName__door de werkelijke naam van de widget. -
Breid de widget uit van een geschikte buitenste widgetklasse. In de meeste gevallen is dit de klasse widget die overeenkomt met de bestaande widget die wordt vervangen. De naam van de bovenliggende klasse wordt op meerdere locaties gebruikt. Het wordt daarom aanbevolen naar alle instanties van de tekenreeks
xfaWidget.textFieldin het bestand te zoeken en deze te vervangen door de werkelijk gebruikte bovenliggende klasse. -
Breid de
rendermethode 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 methoderendermoet een element met gebruikersbesturing retourneren. -
Breid de methode
getOptionsMapuit om opties te overschrijven die worden beïnvloed door een wijziging in de widget. 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. -
De methode
getEventMapwijst gebeurtenissen toe die door de widget worden geactiveerd, met de gebeurtenissen die door het adaptieve formuliermodel worden vereist. De standaardwaarde wijst standaard HTML-gebeurtenissen voor de standaardwidget toe en moet worden bijgewerkt als een alternatieve gebeurtenis wordt geactiveerd. -
De
showDisplayValueenshowValuepassen de weergave- en bewerkingsafbeeldingsvoorwaarde toe en kunnen worden overschreven voor een ander gedrag. -
De
getCommitValuemethode wordt geroepen door het adaptieve vormenkader wanneer decommitgebeurtenis voorkomt. Over het algemeen is dit de afsluitgebeurtenis, behalve voor de vervolgkeuzelijst, het keuzerondje en de selectievakjes (waar deze voorkomt bij wijziging). Voor meer informatie, zie Aangepaste Uitdrukkingen van Forms . -
Het sjabloonbestand biedt voorbeeldimplementatie voor verschillende methoden. Verwijder methoden die niet moeten worden uitgebreid.
-
Een clientbibliotheek maken create-a-client-library
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 de af.customwidgets worden automatisch opgenomen bij uitvoering.
Samenstellen en installeren build-and-install
Om het project te bouwen, voer het volgende bevel op shell uit om een pakket van CRX te produceren dat op de AEM server moet worden geïnstalleerd.
mvn clean install
settings.xml -bestand.Het aangepaste formulier bijwerken update-the-adaptive-form
De aangepaste weergave toepassen op een adaptief formulierveld:
- Open het adaptieve formulier in de bewerkingsmodus.
- Open de dialoog van het Bezit voor het gebied waarop u de douaneverschijning wilt toepassen.
- In het Stijlvolle lusje, werk het
CSS classbezit bij om de verschijningsnaam in hetwidget_<widgetName>formaat toe te voegen. Bijvoorbeeld: widget_numericstepper
Voorbeeld: een aangepaste weergave maken sample-create-a-custom-appearance-nbsp
Bekijk 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://repo1.maven.org/maven2/com/adobe/ -DarchetypeGroupId=com.adobe.aemforms -DarchetypeArtifactId=custom-appearance-archetype -DarchetypeVersion=1.0.4U wordt gevraagd waarden op te geven voor de volgende parameters.
de waarden die in deze steekproef worden gebruikt worden benadrukt in vette letters.Define value for property 'groupId': com.adobe.afwidgetsDefine value for property 'artifactId': customWidgetsDefine value for property 'version': 1.0.1-SNAPSHOTDefine value for property 'package': com.adobe.afwidgetsDefine value for property 'artifactName': customWidgetsDefine value for property 'packageGroup': adobe/customWidgetsDefine value for property 'widgetName': numericStepper -
Navigeer naar de map
customWidgets(opgegeven waarde voor de eigenschapartifactID) 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 naar de map waarin u de opdracht
archetype:generatehebt uitgevoerd en selecteer deze. -
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:-
De numerieke stapfunctie moet worden uitgebreid vanaf
- $.xfaWidget.numericInput. -
De methode
set valuevan de widget stelt de waarde in nadat de focus zich op het veld bevindt. Dit is een verplichte vereiste voor een adaptieve formulierwidget. -
De methode
rendermoet worden overschreven om de methodebootstrapNumberaan te roepen. -
Er is geen andere afhankelijkheid van de plug-in dan de hoofdbroncode van de plug-in.
-
In het voorbeeld wordt geen stijl toegepast op de stapfunctie. Er is dus geen extra CSS vereist.
-
Het object
$userControlmoet beschikbaar zijn voor de methoderender. Dit is een veld van het typetextdat is gekloond met de insteekmodulecode. -
De knoppen + en - moeten worden uitgeschakeld wanneer het veld wordt uitgeschakeld.
-
-
Vervang de inhoud van de plug-in
bootstrap-number-input.js(jQuery) door de inhoud van het bestandnumericStepper-plugin.js. -
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:code language-javascript 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.jsde eigenschapgetOptionsMapom de toegangsoptie te overschrijven en verberg de knoppen + en - in de uitgeschakelde modus.code language-javascript 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 met het
pom.xml-bestand 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_numericSteppertoe te voegen.
-
De nieuwe weergave die u hebt gemaakt, is nu beschikbaar voor gebruik.