Widgets gebruiken en uitbreiden (klassieke UI) using-and-extending-widgets-classic-ui
Adobe Experience Manager-webinterface gebruikt AJAX en andere moderne browsertechnologieën om WYSIWYG-bewerking en -opmaak van inhoud door auteurs rechtstreeks op de webpagina mogelijk te maken.
Adobe Experience Manager (AEM) gebruikt de ExtJS Widget-bibliotheek, die de zeer gepolijste elementen van de gebruikersinterface biedt die in alle belangrijkste browsers werken en het maken van gebruikersinterface van desktopniveau mogelijk maken.
Deze widgets zijn opgenomen in AEM en kunnen, naast het gebruik door AEM zelf, worden gebruikt door elke website die met AEM is gemaakt.
Voor een volledige verwijzing naar alle beschikbare widgets in AEM kunt u verwijzen naar de API-documentatie voor widget of aan de lijst van bestaande xtypes. Daarnaast zijn er veel voorbeelden beschikbaar van het gebruik van het ExtJS-framework op de Sencha , de eigenaar van het raamwerk.
Deze pagina biedt inzicht in het gebruik en uitbreiden van widgets. Hierin wordt eerst beschreven hoe u clientcode op een pagina opnemen. Vervolgens worden enkele voorbeeldcomponenten beschreven die zijn gemaakt om een aantal basistoepassingen en -extensies te illustreren. Deze componenten zijn beschikbaar in de ExtJS-widgets gebruiken pakket op Pakket delen.
Het pakket bevat voorbeelden van:
- Standaarddialoogvensters gemaakt met kant-en-klare widgets.
- Dynamische dialoogvensters gemaakt met kant-en-klare widgets en aangepaste javascript-logica.
- Dialoogvensters gebaseerd op aangepaste widgets.
- A deelvenster met boomstructuur een JCR-structuur onder een bepaald pad weergeven.
- A rasterdeelvenster gegevens weergeven in tabelvorm.
De code aan de clientzijde opnemen in een pagina including-the-client-sided-code-in-a-page
JavaScript- en stijlbladcode aan clientzijde moet in een clientbibliotheek worden geplaatst.
Een clientbibliotheek maken:
-
Hieronder een knooppunt maken
/apps/<project>
met de volgende eigenschappen:code language-none name="clientlib" jcr:mixinTypes="[mix:lockable]" jcr:primaryType="cq:ClientLibraryFolder" sling:resourceType="widgets/clientlib" categories="[<category-name>]" dependencies="[cq.widgets]"
note note NOTE Opmerking: <category-name>
is de naam van de aangepaste bibliotheek (bijvoorbeeld "cq.extjstraining") en wordt gebruikt om de bibliotheek op de pagina op te nemen. -
Onder
clientlib
decss
enjs
mappen (nt:folder). -
Onder
clientlib
decss.txt
enjs.txt
bestanden (nt:bestanden). Deze .txt-bestanden bevatten de bestanden die in de bibliotheek zijn opgenomen. -
Bewerken
js.txt
: moet beginnen met '#base=js
", gevolgd door de lijst van bestanden die door de CQ-clientbibliotheekservice worden samengevoegd, bijvoorbeeld:code language-none #base=js components.js exercises.js CustomWidget.js CustomBrowseField.js InsertTextPlugin.js
-
Bewerken
css.txt
: moet beginnen met '#base=css
", gevolgd door de lijst van bestanden die door de CQ-clientbibliotheekservice worden samengevoegd, bijvoorbeeld:code language-none #base=css components.css
-
Onder de
js
, plaatst u de javascript-bestanden die bij de bibliotheek horen. -
Onder de
css
map, plaats de.css
bestanden en de bronnen die door de CSS-bestanden worden gebruikt (bv.my_icon.png
).
De clientbibliotheek opnemen in de jsp voor de paginacomponent:
-
om zowel javascript-code als stijlpagina's op te nemen:
<ui:includeClientLib categories="<category-name1>, <category-name2>, ..."/>
waar
<category-nameX>
is de naam van de bibliotheek aan de clientzijde. -
alleen javascript-code opnemen:
<ui:includeClientLib js="<category-name>"/>
Zie voor meer informatie de beschrijving van de <ui:includeclientlib> tag.
In sommige gevallen mag een clientbibliotheek alleen beschikbaar zijn in de modus Schrijver en moet deze worden uitgesloten in de publicatiemodus. Dit kan als volgt worden bereikt:
if (WCMMode.fromRequest(request) != WCMMode.DISABLED) {
%><ui:includeClientLib categories="cq.collab.blog"/><%
}
Aan de slag met de voorbeelden getting-started-with-the-samples
Installeer het pakket met de naam ExtJS-widgets gebruiken in een lokale AEM en maak een voorbeeldpagina waarin de componenten worden opgenomen. Daartoe:
-
Download het pakket met de naam ExtJS-widgets gebruiken (v01) van Package Share en installeer het pakket. Het leidt tot het project
extjstraining
onder/apps
in de repository. -
Neem de clientbibliotheek met de scripts (js) en het stijlblad (css) op in de koptag van de geometrixx page jsp, aangezien u de voorbeeldcomponenten opneemt op een nieuwe pagina van de pagina Geometrixx vertakking:
in CRXDE Lite het bestand openen
/apps/geometrixx/components/page/headlibs.jsp
en voeg decq.extjstraining
categorie<ui:includeClientLib>
label als volgt:%><ui:includeClientLib categories="apps.geometrixx-main, cq.extjstraining"/><%
-
Een nieuwe pagina maken in het dialoogvenster Geometrixx vertakking onder
/content/geometrixx/en/products
en noem het ExtJS-widgets gebruiken. -
Ga in ontwerpwijze en voeg alle componenten van de geroepen groep toe ExtJS-widgets gebruiken aan het ontwerp van Geometrixx
-
Ga terug in bewerkingsmodus: de onderdelen van de groep ExtJS-widgets gebruiken zijn beschikbaar in de Sidetrap.
Standaarddialoogvensters basic-dialogs
Dialoogvensters worden doorgaans gebruikt om inhoud te bewerken, maar kunnen ook alleen informatie weergeven. Een gemakkelijke manier om een volledig dialoogvenster weer te geven, is om toegang te krijgen tot de representatie in json-indeling. U doet dit door de browser op te vragen:
http://localhost:4502/<path-to-dialog>.-1.json
De eerste component van de ExtJS-widgets gebruiken groep in de Sidetrap wordt 1. Grondbeginselen van dialoogvensters en bevat vier basisdialoogvensters die zijn samengesteld met widgets die buiten de box vallen en zonder aangepaste javascript-logica. De dialoogvensters worden hieronder opgeslagen /apps/extjstraining/components/dialogbasics
. De basisdialoogvensters zijn:
-
het volledige dialoogvenster (
full
knooppunt): er wordt een venster weergegeven met drie tabbladen, die elk twee tekstvelden hebben. -
Het dialoogvenster Eén deelvenster (
singlepanel
knooppunt): er wordt een venster weergegeven met 1 tab die 2 tekstvelden heeft. -
Het dialoogvenster Meerdere deelvensters (
multipanel
knooppunt): de weergave is hetzelfde als het dialoogvenster Volledig, maar het is anders opgebouwd. -
het dialoogvenster Ontwerpen(
design
knooppunt): er wordt een venster weergegeven met twee tabbladen. De eerste tab heeft een tekstveld, een vervolgkeuzemenu en een inklapbaar tekstgebied. Het tweede tabblad bevat een veldset met 4 tekstvelden en een inklapbaar veld met 2 tekstvelden.
Inclusief de 1. Grondbeginselen van dialoogvensters component in de voorbeeldpagina:
-
Voeg de 1. Grondbeginselen van dialoogvensters naar de voorbeeldpagina van de ExtJS-widgets gebruiken in de Sidetrap.
-
De component geeft een titel, tekst en een EIGENSCHAPPEN koppeling: Klik op de koppeling om de eigenschappen van de alinea weer te geven die in de repository zijn opgeslagen. Klik nogmaals op de koppeling om de eigenschappen te verbergen.
De component wordt als volgt weergegeven:
Voorbeeld 1: Volledig dialoogvenster example-full-dialog
De Volledig wordt een venster weergegeven met drie tabbladen, die elk twee tekstvelden hebben. Dit is het standaarddialoogvenster van het dialoogvenster Grondbeginselen van dialoogvensters component. De kenmerken zijn:
-
Wordt gedefinieerd door een knooppunt: knooppunttype =
cq:Dialog
, xtype =dialog
. -
Geeft 3 tabbladen weer (knooppunttype =
cq:Panel
). -
Elke tab heeft twee tekstvelden (knooppunttype =
cq:Widget
, xtype =textfield
). -
Wordt gedefinieerd door het knooppunt:
/apps/extjstraining/components/dialogbasics/full
-
Wordt in JSON-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/dialogbasics/full.-1.json
Het dialoogvenster wordt als volgt weergegeven:
Voorbeeld 2: Dialoogvenster Eén venster example-single-panel-dialog
De Eén deelvenster wordt een venster weergegeven met één tabblad dat twee tekstvelden heeft. De kenmerken zijn:
-
Geeft 1 tab weer (knooppunttype =
cq:Dialog
, xtype =panel
) -
De tab heeft twee tekstvelden (knooppunttype =
cq:Widget
, xtype =textfield
) -
Wordt gedefinieerd door het knooppunt:
/apps/extjstraining/components/dialogbasics/singlepanel
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/dialogbasics/singlepanel.-1.json
-
Eén voordeel ten opzichte van Volledig dialoogvenster is dat er minder configuratie nodig is.
-
Aanbevolen gebruik: voor eenvoudige dialoogvensters die informatie weergeven of slechts een paar velden bevatten.
Het dialoogvenster Eén deelvenster gebruiken:
-
Het dialoogvenster van het dialoogvenster Grondbeginselen van dialoogvensters met de Eén deelvenster dialoogvenster:
- In CRXDE Lite, verwijdert u het knooppunt:
/apps/extjstraining/components/dialogbasics/dialog
- Klikken Alles opslaan om de wijzigingen op te slaan.
- Kopieer het knooppunt:
/apps/extjstraining/components/dialogbasics/singlepanel
- Plak het gekopieerde knooppunt hieronder:
/apps/extjstraining/components/dialogbasics
- Selecteer het knooppunt:
/apps/extjstraining/components/dialogbasics/Copy of singlepanel
en hernoemendialog
.
- In CRXDE Lite, verwijdert u het knooppunt:
-
Bewerk de component: het dialoogvenster wordt als volgt weergegeven:
Voorbeeld 3: Dialoogvenster Meerdere deelvensters example-multi-panel-dialog
De Meerdere deelvensters wordt dezelfde weergave weergegeven als het dialoogvenster Volledig , maar anders samengesteld. De kenmerken zijn:
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =tabpanel
). -
Geeft 3 tabbladen weer (knooppunttype =
cq:Panel
). -
Elke tab heeft twee tekstvelden (knooppunttype =
cq:Widget
, xtype =textfield
). -
Wordt gedefinieerd door het knooppunt:
/apps/extjstraining/components/dialogbasics/multipanel
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/dialogbasics/multipanel.-1.json
-
Eén voordeel ten opzichte van Volledig dialoogvenster is dat het een vereenvoudigde structuur heeft.
-
Aanbevolen gebruik: voor dialoogvensters met meerdere tabbladen.
Het dialoogvenster Meerdere deelvensters gebruiken:
-
Het dialoogvenster van het dialoogvenster Grondbeginselen van dialoogvensters met de Meerdere deelvensters dialoogvenster:
volgt u de beschreven stappen voor de Voorbeeld 2: Dialoogvenster Eén venster
-
Bewerk de component: het dialoogvenster wordt als volgt weergegeven:
Voorbeeld 4: Rich Dialog example-rich-dialog
De Rich wordt een venster met twee tabbladen weergegeven. De eerste tab heeft een tekstveld, een vervolgkeuzemenu en een inklapbaar tekstgebied. Het tweede tabblad bevat een veldset met vier tekstvelden en een set opvouwbare velden met twee tekstvelden. De kenmerken zijn:
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =dialog
). -
Geeft 2 tabbladen weer (knooppunttype =
cq:Panel
). -
Het eerste tabblad bevat een
dialogfieldset
widget met eentextfield
enselection
widget met 3 opties en een inklapbaar objectdialogfieldset
met eentextarea
widget. -
Het tweede tabblad bevat een
dialogfieldset
widget met 4textfield
widgets en een inklapbaardialogfieldset
met 2textfield
widgets. -
Wordt gedefinieerd door het knooppunt:
/apps/extjstraining/components/dialogbasics/rich
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/dialogbasics/rich.-1.json
Als u de opdracht Rich dialoogvenster:
-
Het dialoogvenster van het dialoogvenster Grondbeginselen van dialoogvensters met de Rich dialoogvenster:
volgt u de beschreven stappen voor de Voorbeeld 2: Dialoogvenster Eén venster
-
Bewerk de component: het dialoogvenster wordt als volgt weergegeven:
Dynamische dialoogvensters dynamic-dialogs
De tweede component van de ExtJS-widgets gebruiken groep in de Sidetrap wordt 2. Dynamische dialoogvensters en bevat drie dynamische dialoogvensters die zijn samengesteld met widgets die niet in de verpakking staan, en met aangepaste javascript-logica. De dialoogvensters worden hieronder opgeslagen /apps/extjstraining/components/dynamicdialogs
. De dynamische dialoogvensters zijn:
- het dialoogvenster Tabs wisselen (
switchtabs
knooppunt): er wordt een venster weergegeven met twee tabbladen. Het eerste tabblad bevat een keuzerondje met drie opties: als een optie is geselecteerd, wordt een tabblad weergegeven dat betrekking heeft op de optie. Het tweede tabblad bevat twee tekstvelden. - het Arbitrage dialoogvenster (
arbitrary
knooppunt): er wordt een venster weergegeven met één tab. Het tabblad bevat een veld voor het neerzetten of uploaden van een element en een veld dat informatie weergeeft over de pagina die het element bevat en over het element als ernaar wordt verwezen. - het dialoogvenster Velden in-/uitschakelen (
togglefield
knooppunt): er wordt een venster weergegeven met één tab. De tab heeft een selectievakje: wanneer deze is ingeschakeld, wordt een veldset met twee tekstvelden weergegeven.
Als u de opdracht 2. Dynamische dialoogvensters component op de voorbeeldpagina:
-
Voeg de 2. Dynamische dialoogvensters naar de voorbeeldpagina van de ExtJS-widgets gebruiken in de Sidetrap.
-
De component geeft een titel, tekst en een EIGENSCHAPPEN koppeling: Klik om de eigenschappen van de alinea weer te geven die in de repository zijn opgeslagen. Klik nogmaals om de eigenschappen te verbergen.
De component wordt als volgt weergegeven:
Voorbeeld 1: Dialoogvenster Tabs wisselen example-switch-tabs-dialog
De Tabs wisselen wordt een venster met twee tabbladen weergegeven. Het eerste tabblad bevat een keuzerondje met drie opties: als een optie is geselecteerd, wordt een tabblad weergegeven dat betrekking heeft op de optie. Het tweede tabblad bevat twee tekstvelden.
De belangrijkste kenmerken zijn:
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =dialog
). -
Geeft 2 tabbladen weer (knooppunttype =
cq:Panel
): 1 selectietab. is het tweede tabblad afhankelijk van de selectie op het eerste tabblad (3 opties). -
Bevat 3 optionele tabbladen (knooppunttype =
cq:Panel
), heeft elk twee tekstvelden (knooppunttype =cq:Widget
, xtype =textfield
). Er wordt slechts één optioneel tabblad tegelijk weergegeven. -
Wordt gedefinieerd door de
switchtabs
knooppunt bij:/apps/extjstraining/components/dynamicdialogs/switchtabs
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/dynamicdialogs/switchtabs.-1.json
De logica wordt als volgt geïmplementeerd via gebeurtenislisteners en javascript-code:
-
Het knooppunt Dialoogvenster heeft een "
beforeshow
" listener die alle optionele tabbladen verbergt voordat het dialoogvenster wordt weergegeven:beforeshow="function(dialog){Ejst.x2.manageTabs(dialog.items.get(0));}"
dialog.items.get(0)
Hiermee krijgt u het deelvenster met tabbladen dat het selectievenster en de drie optionele deelvensters bevat. -
De
Ejst.x2
object wordt gedefinieerd in het dialoogvensterexercises.js
bestand op:/apps/extjstraining/clientlib/js/exercises.js
-
In de
Ejst.x2.manageTabs()
als de waarde vanindex
is -1, zijn alle optionele tabbladen verborgen (ik ga van 1 naar 3). -
Het selectietabblad heeft twee listeners: een tab die het geselecteerde tabblad weergeeft wanneer het dialoogvenster wordt geladen ("
loadcontent
" (gebeurtenis) en een item dat het geselecteerde tabblad weergeeft wanneer de selectie wordt gewijzigd ("selectionchanged
" (gebeurtenis):loadcontent="function(field,rec,path){Ejst.x2.showTab(field);}"
selectionchanged="function(field,value){Ejst.x2.showTab(field);}"
-
In de
Ejst.x2.showTab()
methode:field.findParentByType('tabpanel')
Hiermee wordt het deelvenster met tabbladen opgehaald dat alle tabbladen bevat (field
staat voor de selectiewidget)field.getValue()
Hiermee wordt de waarde van de selectie opgehaald, bijvoorbeeld: tab2Ejst.x2.manageTabs()
geeft het geselecteerde tabblad weer. -
Elk optioneel tabblad bevat een listener die het tabblad "
render
" gebeurtenis:render="function(tab){Ejst.x2.hideTab(tab);}"
-
In de
Ejst.x2.hideTab()
methode:tabPanel
is het deelvenster met tabbladen dat alle tabbladen bevatindex
is de index van het optionele tabbladtabPanel.hideTabStripItem(index)
verbergt de tab
Het wordt als volgt weergegeven:
Voorbeeld 2: Willekeurig dialoogvenster example-arbitrary-dialog
Heel vaak wordt de inhoud van de onderliggende component in een dialoogvenster weergegeven. Het hier beschreven dialoogvenster, genaamd Instelbaar wordt de inhoud van een andere component opgehaald.
De Instelbaar wordt een venster met één tab weergegeven. De tab heeft twee velden: een om een element te plaatsen of te uploaden en een element dat informatie over de pagina met het element en over het element weergeeft als er naar wordt verwezen.
De belangrijkste kenmerken zijn:
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =dialog
). -
Geeft 1 widget van tabbladen weer (knooppunttype =
cq:Widget
, xtype =tabpanel
) met 1 paneel (knooppunttype =cq:Panel
) -
Het deelvenster heeft een widget voor een slim bestand (knooppunttype =
cq:Widget
, xtype =smartfile
) en een ownerdraw-widget (knooppunttype =cq:Widget
, xtype =ownerdraw
) -
Wordt gedefinieerd door de
arbitrary
knooppunt bij:/apps/extjstraining/components/dynamicdialogs/arbitrary
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/dynamicdialogs/arbitrary.-1.json
De logica wordt als volgt geïmplementeerd via gebeurtenislisteners en javascript-code:
-
De ownerdraw-widget heeft een "
loadcontent
" listener die informatie weergeeft over de pagina die de component bevat en het element waarnaar wordt verwezen door de widget voor het slimme bestand wanneer de inhoud wordt geladen:loadcontent="function(field,rec,path){Ejst.x2.showInfo(field,rec,path);}"
field
wordt ingesteld met het eigentekenobjectpath
wordt ingesteld met het inhoudspad van de component (bijvoorbeeld: /content/geometrixx/nl/products/triangle/ui-tutorial/jcr:content/par/dynamicdialogs) -
De
Ejst.x2
object wordt gedefinieerd in het dialoogvensterexercises.js
bestand op:/apps/extjstraining/clientlib/js/exercises.js
-
In de
Ejst.x2.showInfo()
methode:pagePath
is het pad van de pagina die de component bevatpageInfo
geeft de pagina-eigenschappen in de json-indeling aanreference
is het pad van het element waarnaar wordt verwezenmetadata
vertegenwoordigt de metagegevens van het element in json-indelingownerdraw.getEl().update(html);
Hiermee wordt de gemaakte HTML weergegeven in het dialoogvenster
Als u de opdracht Instelbaar dialoogvenster:
-
Het dialoogvenster van het dialoogvenster Dynamisch dialoogvenster met de Instelbaar dialoogvenster:
volgt u de beschreven stappen voor de Voorbeeld 2: Dialoogvenster Eén venster
-
Bewerk de component: het dialoogvenster wordt als volgt weergegeven:
Voorbeeld 3: Dialoogvenster Velden in-/uitschakelen example-toggle-fields-dialog
De Velden in-/uitschakelen wordt een venster met één tab weergegeven. De tab heeft een selectievakje: wanneer deze is ingeschakeld, wordt een veldset met twee tekstvelden weergegeven.
De belangrijkste kenmerken zijn:
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =dialog
). -
Geeft 1 widget van tabbladen weer (knooppunttype =
cq:Widget
, xtype =tabpanel
) met 1 paneel (knooppunttype =cq:Panel
). -
Het deelvenster heeft een widget selectie/selectievakje (knooppunttype =
cq:Widget
, xtype =selection
, type =checkbox
) en een inklapbaar dialogfieldset-widget (knooppunttype =cq:Widget
, xtype =dialogfieldset
) die standaard verborgen is, met 2 tekstveldobjecten (knooppunttype =cq:Widget
, xtype =textfield
). -
Wordt gedefinieerd door de
togglefields
knooppunt bij:/apps/extjstraining/components/dynamicdialogs/togglefields
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/dynamicdialogs/togglefields.-1.json
De logica wordt als volgt geïmplementeerd via gebeurtenislisteners en javascript-code:
-
het selectietabblad heeft twee listeners: die de dialogfieldset weergeeft wanneer de inhoud wordt geladen ("
loadcontent
" (gebeurtenis) en een gebeurtenis die de dialogfieldset weergeeft wanneer de selectie wordt gewijzigd ("selectionchanged
" (gebeurtenis):loadcontent="function(field,rec,path){Ejst.x2.toggleFieldSet(field);}"
selectionchanged="function(field,value){Ejst.x2.toggleFieldSet(field);}"
-
De
Ejst.x2
object wordt gedefinieerd in het dialoogvensterexercises.js
bestand op:/apps/extjstraining/clientlib/js/exercises.js
-
In de
Ejst.x2.toggleFieldSet()
methode:box
is het selectieobjectpanel
Dit is het deelvenster met de selectie en de widgets voor de dialogfieldsetfieldSet
is het dialogfieldset-objectshow
is de waarde van de selectie (waar of onwaar)- gebaseerd op '
show
' De dialogfieldset wordt al dan niet weergegeven
Als u de opdracht Velden in-/uitschakelen dialoogvenster:
-
Het dialoogvenster van het dialoogvenster Dynamisch dialoogvenster met de Velden in-/uitschakelen dialoogvenster:
volgt u de beschreven stappen voor de Voorbeeld 2: Dialoogvenster Eén venster
-
Bewerk de component: het dialoogvenster wordt als volgt weergegeven:
Aangepaste widgets custom-widgets
De widgets uit de doos die bij AEM worden geleverd, moeten de meeste gevallen van gebruik bestrijken. Het kan echter soms nodig zijn om een aangepaste widget te maken die voldoet aan een projectspecifieke vereiste. Aangepaste widgets kunnen worden gemaakt door bestaande widgets uit te breiden. Om u te helpen met dergelijke aanpassingen aan de slag te gaan, ExtJS-widgets gebruiken Het pakket bevat drie dialoogvensters die drie verschillende aangepaste widgets gebruiken:
-
Het dialoogvenster Meerdere velden (
multifield
node) geeft een venster weer met één tab. De tab heeft een aangepaste widget met meerdere velden die twee velden heeft: een vervolgkeuzemenu met twee opties en een tekstveld. Omdat het gebaseerd is op het uit-van-de-doosmultifield
widget (die alleen een tekstveld heeft), heeft deze alle functies van demultifield
widget. -
Het dialoogvenster Bladeren in structuur (
treebrowse
knooppunt) geeft een venster weer met één tabblad dat een widget voor padbrowsers bevat: wanneer u op de pijl klikt, wordt een venster geopend waarin u door een hiërarchie kunt bladeren en een item kunt selecteren. Het pad van het item wordt vervolgens toegevoegd aan het padveld en wordt voortgezet wanneer het dialoogvenster wordt gesloten. -
een op plug-in gebaseerd dialoogvenster van de teksteditor (
rteplugin
node) die een aangepaste knop toevoegt aan de Rich Text Editor om aangepaste tekst in te voegen in de hoofdtekst. Het bestaat uit eenrichtext
widget (RTE) en van een douaneeigenschap die door het mechanisme van de stop van RTE wordt toegevoegd.
De aangepaste widgets en de insteekmodule zijn opgenomen in de component 3. Aangepaste widgets van de ExtJS-widgets gebruiken pakket. Deze component opnemen in de voorbeeldpagina:
-
Voeg de 3. Aangepaste widgets naar de voorbeeldpagina van de ExtJS-widgets gebruiken in de Sidetrap.
-
De component geeft een titel, wat tekst en EIGENSCHAPPEN koppeling, de eigenschappen van de alinea die in de opslagplaats zijn opgeslagen. Als u nogmaals klikt, worden de eigenschappen verborgen.
De component wordt als volgt weergegeven:
Voorbeeld 1: Aangepaste widget voor meerdere velden example-custom-multifield-widget
De Aangepast multiveld op widget gebaseerd dialoogvenster toont een venster met één tab. De tab heeft een aangepaste widget met meerdere velden die, in tegenstelling tot de standaard widget met één veld, twee velden heeft: een vervolgkeuzemenu met twee opties en een tekstveld.
De Aangepast multiveld dialoogvenster op basis van widget:
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =dialog
). -
Geeft 1 widget van tabbladen weer (knooppunttype =
cq:Widget
, xtype =tabpanel
) met een deelvenster (knooppunttype =cq:Widget
, xtype =panel
). -
Het deelvenster bevat een
multifield
widget (knooppunttype =cq:Widget
, xtype =multifield
). -
De
multifield
widget heeft een fieldconfig (knooppunttype =nt:unstructured
, xtype =ejstcustom
, optionsProvider =Ejst.x3.provideOptions
) die is gebaseerd op het aangepaste xtype 'ejstcustom
":-
'
fieldconfig
' is een configuratieoptie van deCQ.form.MultiField
object. -
'
optionsProvider
' is een configuratie van deejstcustom
widget. Deze is ingesteld met deEjst.x3.provideOptions
methode die wordt gedefinieerd inexercises.js
om:/apps/extjstraining/clientlib/js/exercises.js
en retourneert twee opties.
-
-
Wordt gedefinieerd door de
multifield
knooppunt bij:/apps/extjstraining/components/customwidgets/multifield
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/customwidgets/multifield.-1.json
De aangepaste multifield-widget (xtype = ejstcustom
):
-
Is een JavaScript-object dat wordt aangeroepen
Ejst.CustomWidget
. -
Is gedefinieerd in de
CustomWidget.js
javascript-bestand op:/apps/extjstraining/clientlib/js/CustomWidget.js
-
Hiermee breidt u de
CQ.form.CompositeField
widget. -
Bevat 3 velden:
hiddenField
(TextField),allowField
(ComboBox) enotherField
(TextField) -
Overschrijvingen
CQ.Ext.Component#initComponent
om de drie velden toe te voegen:allowField
is een CQ.form.Selection object van het type 'select'. optionsProvider is een configuratie van het Selection-object die wordt geïnstantieerd met de optionsProvider-configuratie van de CustomWidget die is gedefinieerd in het dialoogvensterotherField
is een CQ.Ext.form.TextField object
-
Hiermee overschrijft u de methoden
setValue
,getValue
engetRawValue
van CQ.form.CompositeField om de waarde van CustomWidget met de indeling in te stellen en op te halen:<allowField value>/<otherField value>, e.g.: 'Bla1/hello'
. -
Registreert zichzelf als '
ejstcustom
' xtype:CQ.Ext.reg('ejstcustom', Ejst.CustomWidget);
De Aangepast multiveld Op widget gebaseerde dialoogvensters worden als volgt weergegeven:
Voorbeeld 2: Aangepaste Edge-widget example-custom-treebrowse-widget
De aangepaste Treebrowse Op widget gebaseerd dialoogvenster geeft een venster weer met één tabblad dat een aangepast pad bevat voor de browserwidget: wanneer u op de pijl klikt, wordt een venster geopend waarin u door een hiërarchie kunt bladeren en een item kunt selecteren. Het pad van het item wordt vervolgens toegevoegd aan het padveld en wordt voortgezet wanneer het dialoogvenster wordt gesloten.
Het dialoogvenster Aangepaste browse:
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =dialog
). -
Geeft 1 widget van tabbladen weer (knooppunttype =
cq:Widget
, xtype =tabpanel
) met een deelvenster (knooppunttype =cq:Widget
, xtype =panel
). -
Het deelvenster heeft een aangepaste widget (knooppunttype =
cq:Widget
, xtype =ejstbrowse
) -
Wordt gedefinieerd door de
treebrowse
knooppunt bij:/apps/extjstraining/components/customwidgets/treebrowse
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/customwidgets/treebrowse.-1.json
De aangepaste widget voor browsers (xtype = ejstbrowse
):
-
Is een JavaScript-object dat wordt aangeroepen
Ejst.CustomWidget
. -
Is gedefinieerd in de
CustomBrowseField.js
javascript-bestand op:/apps/extjstraining/clientlib/js/CustomBrowseField.js
-
Uitbreidingen
CQ.Ext.form.TriggerField
. -
Hiermee definieert u een bladervenster met de naam
browseWindow
. -
Overschrijvingen
CQ.Ext.form.TriggerField
om het bladervenster te tonen wanneer de pijl wordt geklikt. -
Definieert een
CQ.Ext.tree.TreePanel
object:- Het krijgt zijn gegevens door servlet te roepen die bij wordt geregistreerd
/bin/wcm/siteadmin/tree.json
. - De basis is "
apps/extjstraining
".
- Het krijgt zijn gegevens door servlet te roepen die bij wordt geregistreerd
-
Definieert een
window
object (CQ.Ext.Window
):- Gebaseerd op het vooraf gedefinieerde deelvenster.
- Heeft een OK die de waarde van het geselecteerde pad instelt en het deelvenster verbergt.
-
Het venster is verankerd onder de Pad veld.
-
Het geselecteerde pad wordt van het bladerveld naar het venster doorgegeven
show
gebeurtenis. -
Registreert zichzelf als '
ejstbrowse
' xtype:CQ.Ext.reg('ejstbrowse', Ejst.CustomBrowseField);
Als u de opdracht Aangepaste Treebrowse dialoogvenster op basis van widget:
-
Het dialoogvenster van het dialoogvenster Aangepaste widgets met de Aangepaste Treebrowse dialoogvenster:
volgt u de beschreven stappen voor de Voorbeeld 2: Dialoogvenster Eén venster
-
Bewerk de component: het dialoogvenster wordt als volgt weergegeven:
Voorbeeld 3: Insteekmodule Rich Text Editor (RTE) example-rich-text-editor-rte-plug-in
De Insteekmodule Rich Text Editor (RTE) Het dialoogvenster is gebaseerd op een dialoogvenster van de Rich Text Editor met een aangepaste knop waarmee u aangepaste tekst tussen vierkante haakjes kunt invoegen. De aangepaste tekst kan worden geparseerd door bepaalde logica aan serverzijde (niet geïmplementeerd in dit voorbeeld), bijvoorbeeld door tekst toe te voegen die op het opgegeven pad is gedefinieerd:
De RTE-insteekmodule gebaseerd dialoogvenster:
-
Wordt gedefinieerd door het knooppunt rteplugin op:
/apps/extjstraining/components/customwidgets/rteplugin
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/customwidgets/rteplugin.-1.json
-
De
rtePlugins
node heeft een onderliggende nodeinserttext
(knooppunttype =nt:unstructured
) genoemd naar de plug-in. Het heeft een eigenschap genaamdfeatures
, die bepaalt welke van de plugin eigenschappen beschikbaar aan RTE zijn.
De RTE-plug-in:
-
Is een JavaScript-object dat wordt aangeroepen
Ejst.InsertTextPlugin
. -
Is gedefinieerd in de
InsertTextPlugin.js
javascript-bestand op:/apps/extjstraining/clientlib/js/InsertTextPlugin.js
-
Hiermee breidt u de
CQ.form.rte.plugins.Plugin
object. -
De volgende methoden definiëren de
CQ.form.rte.plugins.Plugin
-object en worden overschreven in de implementerende plug-in:getFeatures()
retourneert een array met alle functies die de plug-in beschikbaar stelt.initializeUI()
voegt de nieuwe knoop aan de toolbar van RTE toe.notifyPluginConfig()
geeft de titel en de tekst weer wanneer de knop wordt aangeroepen.execute()
wordt aangeroepen wanneer op de knop wordt geklikt en de insteekactie wordt uitgevoerd: er wordt een venster weergegeven waarin de tekst wordt gedefinieerd die moet worden opgenomen.
-
insertText()
voegt tekst in met behulp van het bijbehorende dialoogobjectEjst.InsertTextPlugin.Dialog
(zie hierna). -
executeInsertText()
wordt opgeroepen doorapply()
methode van de dialoog, die wordt teweeggebracht wanneer OK wordt geklikt. -
Registreert zichzelf als '
inserttext
'plug-in:CQ.form.rte.plugins.PluginRegistry.register("inserttext", Ejst.InsertTextPlugin);
-
de
Ejst.InsertTextPlugin.Dialog
wordt het dialoogvenster gedefinieerd dat wordt geopend wanneer op de insteekmodule wordt geklikt. Het dialoogvenster bestaat uit een deelvenster, een formulier, een tekstveld en 2 knoppen (OK en Annuleren).
Als u de opdracht Insteekmodule Rich Text Editor (RTE) gebaseerd dialoogvenster:
-
Het dialoogvenster van het dialoogvenster Aangepaste widgets met de Insteekmodule Rich Text Editor (RTE) gebaseerd dialoogvenster:
volgt u de beschreven stappen voor de Voorbeeld 2: Dialoogvenster Eén venster
-
Bewerk de component.
-
Klik op het laatste pictogram aan de rechterkant (het pictogram met vier pijlen). Voer een pad in en klik op OK:
Het pad wordt tussen haakjes weergegeven (
[]
). -
Klikken OK om de Rich Text Editor te sluiten.
De Insteekmodule Rich Text Editor (RTE) Het dialoogvenster ziet er als volgt uit:
Overzicht van boomstructuur tree-overview
De out-of-the-box CQ.Ext.tree.TreePanel
-object biedt een gestructureerde UI-representatie van gegevens met boomstructuur. De component Overzicht van de Boom inbegrepen in ExtJS-widgets gebruiken toont hoe u het pakket kunt gebruiken TreePanel
object om een JCR-structuur onder een bepaald pad weer te geven. Het venster zelf kan worden gekoppeld of losgekoppeld. In dit voorbeeld is de vensterlogica ingesloten in de JSP-component tussen <script></script> -tags.
Als u de opdracht Overzicht van boomstructuur aan de steekproefpagina:
-
Voeg de 4. Overzicht van boomstructuur naar de voorbeeldpagina van de ExtJS-widgets gebruiken in de Sidetrap.
-
De component wordt weergegeven:
- een titel, met tekst
- a EIGENSCHAPPEN verbinding: Klik om de eigenschappen van de alinea weer te geven die in de repository zijn opgeslagen. Klik nogmaals om de eigenschappen te verbergen.
- een zwevend venster met een boomrepresentatie van de repository, die kan worden uitgebreid.
De component wordt als volgt weergegeven:
De component Overzicht van de Boom:
-
Wordt gedefinieerd bij:
/apps/extjstraining/components/treeoverview
-
In het dialoogvenster kunt u de grootte van het venster instellen en het venster koppelen/ontkoppelen (zie de details hieronder).
The component jsp:
-
Haalt de breedte, hoogte en gedokte eigenschappen op van de repository.
-
Geeft enige tekst weer over de gegevensindeling van het boomoverzicht.
-
Hiermee sluit u de vensterlogica in de jsp van de component tussen javascript-tags in.
-
Wordt gedefinieerd bij:
apps/extjstraining/components/treeoverview/content.jsp
De javascript-code die is ingesloten in de jsp van de component:
-
Definieert een
tree
door te proberen een structuurvenster van de pagina op te halen. -
Als het venster met de boomstructuur niet bestaat,
treePanel
(CQ.Ext.tree.TreePanel) is gemaakt:-
treePanel
bevat de gegevens die worden gebruikt om het venster te maken. -
De gegevens worden teruggewonnen door servlet te roepen die bij wordt geregistreerd:
/bin/wcm/siteadmin/tree.json
-
-
De
beforeload
listener zorgt ervoor dat het aangeklikte knooppunt wordt geladen. -
De
root
object stelt het pad inapps/extjstraining
als de hoofdstructuur van de boom. -
tree
(CQ.Ext.Window
) wordt ingesteld op basis van de vooraf gedefinieerdetreePanel
en wordt weergegeven met:tree.show();
-
Als het venster al bestaat, wordt het weergegeven op basis van de breedte, hoogte en gedokte eigenschappen die zijn opgehaald uit de opslagplaats.
Het dialoogvenster Component:
-
Geeft 1 tab met 2 velden weer om de grootte (breedte en hoogte) van het venster met het overzicht van de structuur in te stellen en 1 veld om het venster te koppelen/ontkoppelen
-
Wordt gedefinieerd door een knooppunt (knooppunttype =
cq:Dialog
, xtype =panel
). -
Het deelvenster heeft een widget Deelveld sizefield (knooppunttype =
cq:Widget
, xtype =sizefield
) en een selectiewidget (knooppunttype =cq:Widget
, xtype =selection
, type =radio
) met 2 opties (true/false) -
Wordt gedefinieerd door het dialoogknooppunt op:
/apps/extjstraining/components/treeoverview/dialog
-
Wordt in json-indeling weergegeven door het volgende aan te vragen:
http://localhost:4502/apps/extjstraining/components/treeoverview/dialog.-1.json
-
Hieronder wordt weergegeven:
Rasteroverzicht grid-overview
Een deelvenster Raster vertegenwoordigt gegevens in tabelvorm van rijen en kolommen. Het bestaat uit:
- Winkel: het model met de gegevensrecords (rijen).
- Kolommodel: de kolomsamenstelling.
- Weergave: kapselt het gebruikersinterface in.
- Selectiemodel: het selectiegedrag.
De component Rasteroverzicht die is opgenomen in de ExtJS-widgets gebruiken Het pakket toont hoe u gegevens in tabelvorm kunt weergeven:
- In voorbeeld 1 worden statische gegevens gebruikt.
- In voorbeeld 2 worden gegevens gebruikt die uit de gegevensopslagruimte zijn opgehaald.
De component Rasteroverzicht opnemen in de voorbeeldpagina:
-
Voeg de 5. Rasteroverzicht naar de voorbeeldpagina van de ExtJS-widgets gebruiken in de Sidetrap.
-
De component wordt weergegeven:
- een titel met tekst
- a EIGENSCHAPPEN koppeling: Klik om de eigenschappen van de alinea weer te geven die in de repository zijn opgeslagen. Klik nogmaals om de eigenschappen te verbergen.
- een zwevend venster met gegevens in tabelvorm.
De component wordt als volgt weergegeven:
Voorbeeld 1: Standaardraster example-default-grid
In zijn uit-van-de-doosversie, toont de component van het Overzicht van het Net een venster met statische gegevens in een in tabelvorm formaat. In dit voorbeeld wordt de logica op twee manieren ingesloten in de jsp van de component:
- de algemene logica wordt gedefinieerd tussen <script></script>-tags
- de specifieke logica is beschikbaar in een afzonderlijk JS-bestand en is gekoppeld in het Jsp. Met deze instelling kunt u eenvoudig schakelen tussen de twee logica (statisch/dynamisch) door de gewenste <script>-tags toe te voegen.
De component Rasteroverzicht:
-
Wordt gedefinieerd bij:
/apps/extjstraining/components/gridoverview
-
In dit dialoogvenster kunt u de grootte van het venster instellen en het venster koppelen/ontkoppelen.
The component jsp:
-
Haalt de breedte, hoogte en gedokte eigenschappen op van de repository.
-
Geeft wat tekst weer als inleiding op de gegevensindeling van het rasteroverzicht.
-
Verwijst naar javascript-code die het GridPanel-object definieert:
<script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script>
defaultgrid.js
definieert enkele statische gegevens als basis voor het GridPanel-object. -
Hiermee wordt javascript-code ingesloten tussen javascript-tags die het Window-object definiëren dat het GridPanel-object gebruikt.
-
Wordt gedefinieerd bij:
apps/extjstraining/components/gridoverview/content.jsp
De javascript-code die is ingesloten in de jsp van de component:
-
Definieert de
grid
-object door te proberen de venstercomponent van de pagina op te halen:var grid = CQ.Ext.getCmp("<%= node.getName() %>-grid");
-
Indien
grid
bestaat niet, a CQ.Ext.grid.GridPanel object (gridPanel
) wordt gedefinieerd door het aanroepen van degetGridPanel()
methode (zie hieronder). Deze methode is gedefinieerd indefaultgrid.js
. -
grid
is eenCQ.Ext.Window
object, gebaseerd op het vooraf gedefinieerde GridPanel, en wordt weergegeven:grid.show();
-
Indien
grid
al bestaat, wordt deze weergegeven op basis van de breedte, hoogte en gedokte eigenschappen die zijn opgehaald uit de opslagplaats.
Het javascript-bestand ( defaultgrid.js
) waarnaar wordt verwezen in de component jsp definieert de getGridPanel()
methode die wordt aangeroepen door het script dat is ingesloten in de JSP en die een CQ.Ext.grid.GridPanel
object, op basis van statische gegevens. De logica is als volgt:
-
myData
is een array van statische gegevens die zijn opgemaakt als een tabel van 5 kolommen en 4 rijen. -
store
is eenCQ.Ext.data.Store
object dat verbruiktmyData
. -
store
wordt geladen in het geheugen:store.load();
-
gridPanel
is eenCQ.Ext.grid.GridPanel
object dat verbruiktstore
:-
de kolombreedten worden altijd opnieuw proportioneel:
forceFit: true
-
u kunt slechts één rij tegelijk selecteren:
singleSelect:true
-
Voorbeeld 2: Zoekraster van verwijzing example-reference-search-grid
Wanneer u het pakket installeert, content.jsp
van de Rasteroverzicht geeft een raster weer dat is gebaseerd op statische gegevens. Het is mogelijk om de component te wijzigen om een raster met de volgende kenmerken weer te geven:
- Bevat drie kolommen.
- Is gebaseerd op gegevens die van de bewaarplaats door een servlet te roepen worden teruggewonnen.
- De cellen van de laatste kolom kunnen worden bewerkt. De waarde blijft bestaan in een
test
eigenschap onder het knooppunt dat wordt gedefinieerd door het pad dat in de eerste kolom wordt weergegeven.
Zoals eerder uitgelegd in de sectie, krijgt het vensterobject zijn CQ.Ext.grid.GridPanel
object aanroepen getGridPanel()
in de defaultgrid.js
bestand bij /apps/extjstraining/components/gridoverview/defaultgrid.js
. De Rasteroverzicht biedt een andere implementatie voor de getGridPanel()
methode, gedefinieerd in de referencesearch.js
bestand bij /apps/extjstraining/components/gridoverview/referencesearch.js
. Door het .js dossier te schakelen dat in component jsp van verwijzingen wordt voorzien, zal het net op gegevens worden gebaseerd die van de bewaarplaats worden teruggewonnen.
Van .js dossier schakelen dat in component jsp van verwijzingen wordt voorzien:
-
In CRXDE Lite in de
content.jsp
bestand van de component, de regel met hetdefaultgrid.js
zodat het er als volgt uitziet:<!-- script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script-->
-
Verwijder de opmerking uit de regel met de
referencesearch.js
zodat het er als volgt uitziet:<script type="text/javascript" src="/apps/extjstraining/components/gridoverview/referencesearch.js"></script>
-
Sla de wijzigingen op.
-
Vernieuw de voorbeeldpagina.
De component wordt als volgt weergegeven:
De javascript-code waarnaar in de component jsp wordt verwezen (referencesearch.js
) definieert de getGridPanel()
methode geroepen van component jsp en keert een CQ.Ext.grid.GridPanel
object, op basis van gegevens die dynamisch uit de gegevensopslagruimte worden opgehaald. De logica in referencesearch.js
bepaalt sommige dynamische gegevens als basis voor GridPanel:
-
reader
is eenCQ.Ext.data.JsonReader
-object dat de servlet-reactie in json-indeling voor 3 kolommen leest. -
cm
is eenCQ.Ext.grid.ColumnModel
object voor 3 kolommen.De kolomcellen van de "Test"kunnen worden uitgegeven aangezien zij met een redacteur worden bepaald:
editor: new
CQ.Ext.form.TextField
({})
-
de kolommen kunnen worden gesorteerd:
cm.defaultSortable = true;
-
store
is eenCQ.Ext.data.GroupingStore
object:- het krijgt zijn gegevens door servlet te roepen die bij " wordt geregistreerd
/bin/querybuilder.json
" met een paar parameters die worden gebruikt om de query te filteren - zij is gebaseerd op
reader
, vooraf gedefinieerd - de tabel wordt gesorteerd volgens de "jcr:pad' kolom in oplopende volgorde
- het krijgt zijn gegevens door servlet te roepen die bij " wordt geregistreerd
-
gridPanel
is eenCQ.Ext.grid.EditorGridPanel
object dat kan worden bewerkt:-
het is gebaseerd op de vooraf gedefinieerde
store
en op het kolommodelcm
-
u kunt slechts één rij tegelijk selecteren:
sm: new
CQ.Ext.grid.RowSelectionModel
({singleSelect:true})
-
de
afteredit
listener zorgt ervoor dat na een cel in de map "Testen" kolom is bewerkt:- de eigenschap '
test
' van het knooppunt op het pad dat wordt gedefinieerd door "jcr:pad" column wordt ingesteld in de repository met de waarde van de cel - als de POST is gelukt, wordt de waarde toegevoegd aan de
store
object, anders wordt het geweigerd
- de eigenschap '
-