Använda och utöka widgetar (Classic UI) using-and-extending-widgets-classic-ui

CAUTION
AEM 6.4 har nått slutet på den utökade supporten och denna dokumentation är inte längre uppdaterad. Mer information finns i teknisk supportperiod. Hitta de versioner som stöds här.

Adobe Experience Manager webbaserade gränssnitt använder AJAX och andra moderna webbläsartekniker för att möjliggöra WYSIWYG-redigering och -formatering av innehåll som författarna skapar direkt på webbsidan.

Adobe Experience Manager (AEM) använder ExtJS widgetbiblioteket, som innehåller mycket prydliga gränssnittselement som fungerar i alla de viktigaste webbläsarna och gör det möjligt att skapa användargränssnitt i skrivbordsmiljö.

Dessa widgetar ingår i AEM och kan användas av alla webbplatser som byggs med AEM, utöver AEM.

En fullständig referens till alla tillgängliga widgetar i AEM finns i API-dokumentation för widget eller till lista över befintliga xtypes. Dessutom finns det många exempel på hur du använder ExtJS-ramverket på Sencha webbplats, ramverkets ägare.

På den här sidan finns information om hur du använder och utökar widgetar. Först beskrivs hur inkludera klientsidig kod på en sida. Sedan beskrivs några exempelkomponenter som har skapats för att illustrera grundläggande användning och tillägg. Dessa komponenter är tillgängliga i Använda ExtJS-widgetar package on Paketresurs.

Paketet innehåller exempel på:

NOTE
Adobe Experience Manager klassiska gränssnitt bygger på ExtJS 3.4.0.
NOTE
Den här sidan beskriver användningen av widgetar i det klassiska användargränssnittet. Adobe rekommenderar att du utnyttjar det moderna pekaktiverat användargränssnitt baserat på Coral UI och Granite-gränssnitt.

Inkludera klientsideskoden på en sida including-the-client-sided-code-in-a-page

Klientsidig javascript- och formatmallskod ska placeras i ett klientbibliotek.

Så här skapar du ett klientbibliotek:

  1. Skapa en nod nedan /apps/<project> med följande egenskaper:

    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
    Obs! <category-name> är namnet på det anpassade biblioteket (t.ex. "cq.extjstraining") och används för att inkludera biblioteket på sidan.
  2. Nedanför clientlib skapa css och js mappar (not:folder).

  3. Nedanför clientlib skapa css.txt och js.txt filer (inte:filer). Dessa .txt-filer listar de filer som ingår i biblioteket.

  4. Redigera js.txt: måste börja med ' #base=js" följt av en lista över de filer som kommer att sammanställas av CQ-klientbibliotekstjänsten, t.ex.:

    code language-none
    #base=js
     components.js
     exercises.js
     CustomWidget.js
     CustomBrowseField.js
     InsertTextPlugin.js
    
  5. Redigera css.txt: måste börja med ' #base=css" följt av en lista över de filer som kommer att sammanställas av CQ-klientbibliotekstjänsten, t.ex.:

    code language-none
    #base=css
     components.css
    
  6. Under js placerar du de javascript-filer som tillhör biblioteket.

  7. Under css mapp, placera .css filer och de resurser som används av css-filerna (t.ex. my_icon.png).

NOTE
Det är valfritt att hantera formatmallar som beskrivs ovan.

Så här inkluderar du klientbiblioteket i sidkomponentens jsp:

  • för att inkludera både javascript-kod och formatmallar:

    <ui:includeClientLib categories="<category-name1>, <category-name2>, ..."/>

    där <category-nameX> är namnet på klientbiblioteket.

  • att endast inkludera javascript-kod:

    <ui:includeClientLib js="<category-name>"/>

Mer information finns i beskrivningen av <ui:includeclientlib> -tagg.

I vissa fall bör ett klientbibliotek endast vara tillgängligt i redigeringsläge och inte finnas i publiceringsläge. Det kan uppnås på följande sätt:

    if (WCMMode.fromRequest(request) != WCMMode.DISABLED) {
        %><ui:includeClientLib categories="cq.collab.blog"/><%
    }

Komma igång med exemplen getting-started-with-the-samples

Installera det paket som kallas om du vill följa självstudiekurserna på den här sidan Använda ExtJS-widgetar i en lokal AEM och skapa en exempelsida där komponenterna ska inkluderas. Så här gör du:

  1. Hämta AEM paket som anropas Använda ExtJS-widgetar (v01) från Paketresurs och installera paketet. Det skapar projektet extjstraining nedan /apps i databasen.

  2. Inkludera klientbiblioteket som innehåller skripten (js) och formatmallen (css) i head-taggen för geometrixx-sidan jsp, eftersom du tar med exempelkomponenterna på en ny sida i Geometrixx gren:

    in CRXDE Lite öppna filen /apps/geometrixx/components/page/headlibs.jsp och lägg till cq.extjstraining till befintlig <ui:includeClientLib> -tagg enligt följande:

    %><ui:includeClientLib categories="apps.geometrixx-main, cq.extjstraining"/><%

  3. Skapa en ny sida i Geometrixx förgrening nedan /content/geometrixx/en/products och ringa Använda ExtJS-widgetar.

  4. Gå till designläge och lägg till alla komponenterna i gruppen som kallas Använda ExtJS-widgetar till utformningen av Geometrixx

  5. Gå tillbaka i redigeringsläge: komponenterna i gruppen Använda ExtJS-widgetar finns i The Sidekick.

NOTE
Exemplen på den här Geometrixx baseras på exempelinnehållet, som inte längre levereras med AEM, som har ersatts av We.Retail. Se dokumentet Implementering av referens för Vi.butik för att hämta och installera Geometrixx.

Grundläggande dialogrutor basic-dialogs

Dialogrutor används ofta för att redigera innehåll, men kan även visa enbart information. Ett enkelt sätt att visa en komplett dialogruta är att få tillgång till dess representation i json-format. Om du vill göra det pekar du i webbläsaren på:

http://localhost:4502/<path-to-dialog>.-1.json

Den första komponenten i Använda ExtJS-widgetar gruppen i Sidesparken kallas 1. Grundläggande om dialogrutor och innehåller fyra grundläggande dialogrutor som är byggda med färdiga widgetar och utan anpassad javascript-logik. Dialogrutorna sparas nedan /apps/extjstraining/components/dialogbasics. De grundläggande dialogrutorna är:

  • Dialogrutan Fullständig ( full nod): visas ett fönster med 3 flikar, där varje flik har 2 textfält.

  • dialogrutan Enstaka panel( singlepanel nod): visas ett fönster med en flik som innehåller 2 textfält.

  • dialogrutan Flera paneler( multipanel nod): den visas på samma sätt som i den fullständiga dialogrutan, men den har skapats på ett annat sätt.

  • dialogrutan Design( design nod): visas ett fönster med 2 flikar. Den första fliken har ett textfält, en nedrullningsbar meny och ett komprimerbart textområde. Den andra fliken har ett fält med fyra textfält och ett komprimerbart fält med två textfält.

Inkludera 1. Grundläggande om dialogrutor -komponenten på exempelsidan:

  1. Lägg till 1. Grundläggande om dialogrutor till exempelsidan från Använda ExtJS-widgetar i Sidekick.

  2. Komponenten visar en titel, lite text och en EGENSKAPER länk: Klicka på länken för att visa egenskaperna för det stycke som lagras i databasen. Klicka på länken igen för att dölja egenskaperna.

Komponenten visas enligt följande:

chlimage_1-135

Exempel 1: Fullständig dialogruta example-full-dialog

The Fullständig visas ett fönster med tre flikar där varje flik har två textfält. Det är standarddialogrutan för Grundläggande om dialogrutor -komponenten. Dess egenskaper är:

  • Definieras av en nod: nodtyp = cq:Dialog, xtype = dialog.

  • Visar 3 flikar (nodtyp = cq:Panel).

  • Varje flik har två textfält (nodtyp = cq:Widget, xtype = textfield).

  • Definieras av noden:

    /apps/extjstraining/components/dialogbasics/full

  • Renderas i JSON-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/dialogbasics/full.-1.json

Dialogrutan visas enligt följande:

screen_shot_2012-01-31at45411pm

Exempel 2: Dialogrutan En panel example-single-panel-dialog

The Enkel panel visas ett fönster med en flik som innehåller två textfält. Dess egenskaper är:

  • Visar en flik (nodtyp = cq:Dialog, xtype = panel)

  • Fliken har två textfält (nodtyp = cq:Widget, xtype = textfield)

  • Definieras av noden:

    /apps/extjstraining/components/dialogbasics/singlepanel

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/dialogbasics/singlepanel.-1.json

  • En fördel framför Fullständig dialogruta är att mindre konfiguration behövs.

  • Rekommenderad användning: för enkla dialogrutor som visar information eller bara har ett fåtal fält.

Så här använder du dialogrutan En panel:

  1. Ersätta dialogrutan Grundläggande om dialogrutor med Enkel panel dialog:

    1. I CRXDE Lite, ta bort noden: /apps/extjstraining/components/dialogbasics/dialog
    2. Klicka Spara alla för att spara ändringarna.
    3. Kopiera noden: /apps/extjstraining/components/dialogbasics/singlepanel
    4. Klistra in den kopierade noden nedan: /apps/extjstraining/components/dialogbasics
    5. Markera noden: /apps/extjstraining/components/dialogbasics/Copy of singlepaneloch byta namn på den dialog.
  2. Redigera komponenten: dialogrutan visas enligt följande:

screen_shot_2012-01-31at45952pm

Exempel 3: Dialogruta med flera paneler example-multi-panel-dialog

The Flera paneler visas på samma sätt som Fullständig men den är uppbyggd på ett annat sätt. Dess egenskaper är:

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = tabpanel).

  • Visar 3 flikar (nodtyp = cq:Panel).

  • Varje flik har två textfält (nodtyp = cq:Widget, xtype = textfield).

  • Definieras av noden:

    /apps/extjstraining/components/dialogbasics/multipanel

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/dialogbasics/multipanel.-1.json

  • En fördel framför Fullständig dialogruta är att den har en förenklad struktur.

  • Rekommenderad användning: för dialogrutor med flera flikar.

Så här använder du dialogrutan Flera paneler:

  1. Ersätta dialogrutan Grundläggande om dialogrutor med Flera paneler dialog:

    följer de steg som beskrivs för Exempel 2: Dialogrutan En panel

  2. Redigera komponenten: dialogrutan visas enligt följande:

screen_shot_2012-01-31at50119pm

Exempel 4: Dialogrutan Multimedia example-rich-dialog

The Rich visas ett fönster med två flikar. Den första fliken har ett textfält, en nedrullningsbar meny och ett komprimerbart textområde. Den andra fliken har ett fält med fyra textfält och ett komprimerbart fält med två textfält. Dess egenskaper är:

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = dialog).

  • Visar 2 flikar (nodtyp = cq:Panel).

  • Den första fliken har en dialogfieldset widget med en textfield och selection widget med 3 alternativ och en komprimerbar dialogfieldset med textarea widget.

  • Den andra fliken har en dialogfieldset widget med 4 textfield och en komprimerbar dialogfieldset med 2 textfield widgetar.

  • Definieras av noden:

    /apps/extjstraining/components/dialogbasics/rich

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/dialogbasics/rich.-1.json

Så här använder du Rich dialog:

  1. Ersätta dialogrutan Grundläggande om dialogrutor med Rich dialog:

    följer de steg som beskrivs för Exempel 2: Dialogrutan En panel

  2. Redigera komponenten: dialogrutan visas enligt följande:

screen_shot_2012-01-31at50429pm screen_shot_2012-01-31at50519pm

Dynamiska dialogrutor dynamic-dialogs

Den andra komponenten i Använda ExtJS-widgetar gruppen i Sidesparken kallas 2. Dynamiska dialogrutor och innehåller tre dynamiska dialogrutor som är byggda med färdiga widgetar och med anpassad javascript-logik. Dialogrutorna sparas nedan /apps/extjstraining/components/dynamicdialogs. De dynamiska dialogrutorna är:

  • dialogrutan Byt flikar ( switchtabs nod): visas ett fönster med två flikar. Den första fliken har en alternativmarkering med tre alternativ: När ett alternativ är markerat visas en flik som relaterar till alternativet. Den andra fliken har två textfält.
  • den godtyckliga dialogen ( arbitrary nod): visas ett fönster med en flik. Fliken innehåller ett fält där en resurs och ett fält som visar information om sidan som innehåller objektet och om resursen, om det finns någon referens till det, ska släppas eller överföras.
  • dialogrutan Växla fält ( togglefield nod): visas ett fönster med en flik. Fliken har en kryssruta: när den är markerad visas en fältuppsättning med två textfält.

Inkludera 2. Dynamiska dialogrutor -komponenten på exempelsidan:

  1. Lägg till 2. Dynamiska dialogrutor till exempelsidan från Använda ExtJS-widgetar i Sidekick.

  2. Komponenten visar en titel, lite text och en EGENSKAPER länk: klicka för att visa egenskaperna för det stycke som lagras i databasen. Klicka igen för att dölja egenskaperna.

Komponenten visas enligt följande:

chlimage_1-136

Exempel 1: Dialogrutan Växla flikar example-switch-tabs-dialog

The Växla flikar visas ett fönster med två flikar. Den första fliken har en alternativmarkering med tre alternativ: När ett alternativ är markerat visas en flik som relaterar till alternativet. Den andra fliken har två textfält.

Dess huvudsakliga egenskaper är:

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = dialog).

  • Visar 2 flikar (nodtyp = cq:Panel): Den andra fliken beror på vad du har valt på den första fliken (3 alternativ).

  • Har tre valfria flikar (nodtyp = cq:Panel) har vart och ett två textfält (nodtyp = cq:Widget, xtype = textfield). Endast en valfri flik i taget visas.

  • Definieras av switchtabs nod vid:

    /apps/extjstraining/components/dynamicdialogs/switchtabs

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/dynamicdialogs/switchtabs.-1.json

Logiken implementeras med händelseavlyssnare och javascript-kod enligt följande:

  • Dialognoden har en beforeshow" som döljer alla valfria flikar innan dialogrutan visas:

    beforeshow="function(dialog){Ejst.x2.manageTabs(dialog.items.get(0));}"

    dialog.items.get(0) hämtar den flikpanel som innehåller markeringspanelen och de tre valfria panelerna.

  • The Ejst.x2 -objektet definieras i exercises.js fil på:

    /apps/extjstraining/clientlib/js/exercises.js

  • I Ejst.x2.manageTabs() metod, som värdet för index är -1 är alla valfria flikar dolda (i går från 1 till 3).

  • Markeringsfliken har två avlyssnare: som visar den valda fliken när dialogrutan läses in (" loadcontent" -händelse) och en som visar den valda fliken när markeringen ändras (" selectionchanged" event):

    loadcontent="function(field,rec,path){Ejst.x2.showTab(field);}"

    selectionchanged="function(field,value){Ejst.x2.showTab(field);}"

  • I Ejst.x2.showTab() metod:

    field.findParentByType('tabpanel') hämtar flikpanelen som innehåller alla flikar ( field representerar markeringswidgeten)

    field.getValue() hämtar värdet för markeringen, t.ex.: tab2

    Ejst.x2.manageTabs() visar den valda fliken.

  • Varje valfri flik har en avlyssnare som döljer fliken på render" event:

    render="function(tab){Ejst.x2.hideTab(tab);}"

  • I Ejst.x2.hideTab() metod:

    tabPanel är den flikpanel som innehåller alla flikar

    index är indexvärdet för den valfria fliken

    tabPanel.hideTabStripItem(index) döljer fliken

Den visas enligt följande:

screen_shot_2012-02-01at114745am

Exempel 2: Godtycklig dialogruta example-arbitrary-dialog

I en dialogruta visas ofta innehåll från den underliggande komponenten. Dialogrutan som beskrivs här kallas Godtycklig används för att hämta innehåll från en annan komponent.

The Godtycklig visas ett fönster med en flik. Fliken har två fält: en om du vill släppa eller överföra en resurs och en som visar viss information om behållarsidan och om resursen, om någon sådan har refererats.

Dess huvudsakliga egenskaper är:

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = dialog).

  • Visar en flikpanelswidget (nodtyp = cq:Widget, xtype = tabpanel) med 1 panel (nodtyp = cq:Panel)

  • Panelen har en smartfile-widget (nodtyp = cq:Widget, xtype = smartfile) och en egen widget (nodtyp = cq:Widget, xtype = ownerdraw)

  • Definieras av arbitrary nod vid:

    /apps/extjstraining/components/dynamicdialogs/arbitrary

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/dynamicdialogs/arbitrary.-1.json

Logiken implementeras med händelseavlyssnare och javascript-kod enligt följande:

  • Widgeten för egen ritning har en loadcontent" avlyssnare som visar information om sidan som innehåller komponenten och resursen som refereras av smartfile-widgeten när innehållet läses in:

    loadcontent="function(field,rec,path){Ejst.x2.showInfo(field,rec,path);}"

    field anges med objektet ownerdraw

    path anges med komponentens innehållssökväg (t.ex.: /content/geometrixx/en/products/triangle/ui-tutorial/jcr:content/par/dynamicdialogs)

  • The Ejst.x2 -objektet definieras i exercises.js fil på:

    /apps/extjstraining/clientlib/js/exercises.js

  • I Ejst.x2.showInfo() metod:

    pagePath är sökvägen till sidan som innehåller komponenten

    pageInfo representerar sidegenskaperna i json-format

    reference är sökvägen till den refererade resursen

    metadata representerar metadata för resursen i json-format

    ownerdraw.getEl().update(html); visar den skapade HTML-koden i dialogrutan

Så här använder du Godtycklig dialog:

  1. Ersätta dialogrutan Dynamisk dialogruta med Godtycklig dialog:

    följer de steg som beskrivs för Exempel 2: Dialogrutan En panel

  2. Redigera komponenten: dialogrutan visas enligt följande:

screen_shot_2012-02-01at115300am

Exempel 3: Växla fält, dialogruta example-toggle-fields-dialog

The Växla fält visas ett fönster med en flik. Fliken har en kryssruta: när den är markerad visas en fältuppsättning med två textfält.

Dess huvudsakliga egenskaper är:

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = dialog).

  • Visar en flikpanelswidget (nodtyp = cq:Widget, xtype = tabpanel) med 1 panel (nodtyp = cq:Panel).

  • Panelen har en widget för markering/kryssruta (nodtyp = cq:Widget, xtype = selection, typ = checkbox) och en komprimerbar dialogfältuppsättningswidget (nodtyp = cq:Widget, xtype = dialogfieldset) som är dold som standard, med 2 textfältswidgetar (nodtyp = cq:Widget, xtype = textfield).

  • Definieras av togglefields nod vid:

    /apps/extjstraining/components/dynamicdialogs/togglefields

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/dynamicdialogs/togglefields.-1.json

Logiken implementeras med händelseavlyssnare och javascript-kod enligt följande:

  • på markeringsfliken finns två avlyssnare: som visar dialogrutorna när innehållet läses in (" loadcontent" event) och en som visar dialogrutans fältuppsättning när markeringen ändras (" selectionchanged" event):

    loadcontent="function(field,rec,path){Ejst.x2.toggleFieldSet(field);}"

    selectionchanged="function(field,value){Ejst.x2.toggleFieldSet(field);}"

  • The Ejst.x2 -objektet definieras i exercises.js fil på:

    /apps/extjstraining/clientlib/js/exercises.js

  • I Ejst.x2.toggleFieldSet() metod:

    • box är markeringsobjektet
    • panel är den panel som innehåller markeringen och dialogfältuppsättningswidgetar
    • fieldSet är dialogfältuppsättningsobjektet
    • show är värdet för markeringen (true eller false)
    • baserat på show' dialogfältuppsättningen visas eller inte

Så här använder du Växla fält dialog:

  1. Ersätta dialogrutan Dynamisk dialogruta med Växla fält dialog:

    följer de steg som beskrivs för Exempel 2: Dialogrutan En panel

  2. Redigera komponenten: dialogrutan visas enligt följande:

screen_shot_2012-02-01at115518am

Anpassade widgetar custom-widgets

De färdiga widgetarna som levereras med AEM bör omfatta de flesta användningsfall. Ibland kan det dock vara nödvändigt att skapa en anpassad widget som täcker ett projektspecifikt krav. Du kan skapa anpassade widgetar genom att utöka befintliga. För att du ska komma igång med en sådan anpassning Använda ExtJS-widgetar paketet innehåller tre dialogrutor som använder tre olika anpassade widgetar:

  • dialogrutan Flerfält ( multifield nod) visar ett fönster med en flik. Fliken har en anpassad widget för flera fält som har två fält: en nedrullningsbar meny med två alternativ och ett textfält. Baserat på färdiga multifield widgeten (som bara har ett textfält) har den alla funktioner som finns i multifield widget.

  • dialogrutan Trädbläddring ( treebrowse nod) visar ett fönster med en flik som innehåller en sökvägswidget: När du klickar på pilen öppnas ett fönster där du kan bläddra i en hierarki och markera ett objekt. Sökvägen för objektet läggs sedan till i sökvägsfältet och bevaras när dialogrutan stängs.

  • en dialogruta baserad på ett plugin-program för RTF-redigering ( rteplugin nod) som lägger till en anpassad knapp i RTF-redigeraren för att infoga anpassad text i huvudtexten. Den består av en richtext widgeten (RTE) och en anpassad funktion som läggs till via plugin-programmet för textredigering.

De anpassade widgetarna och plugin-programmet ingår i komponenten som kallas 3. Anpassade widgetar i Använda ExtJS-widgetar paket. Så här inkluderar du den här komponenten på exempelsidan:

  1. Lägg till 3. Anpassade widgetar till exempelsidan från Använda ExtJS-widgetar i Sidekick.

  2. Komponenten visar en titel, en del text och när du klickar på EGENSKAPER -länk, egenskaperna för det stycke som lagras i databasen. Om du klickar igen döljs egenskaperna.

    Komponenten visas enligt följande:

chlimage_1-137

Exempel 1: Anpassad widget för flera fält example-custom-multifield-widget

The Anpassat multifält widgetbaserad dialogruta visar ett fönster med en flik. Fliken har en anpassad widget för flera fält som, till skillnad från den som har ett fält, har två fält: en nedrullningsbar meny med två alternativ och ett textfält.

The Anpassat multifält widgetbaserad dialogruta:

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = dialog).

  • Visar en flikpanelswidget (nodtyp = cq:Widget, xtype = tabpanel) som innehåller en panel (nodtyp = cq:Widget, xtype = panel).

  • Panelen har en multifield widget (nodtyp = cq:Widget, xtype = multifield).

  • The multifield widgeten har en fältkonfiguration (nodtyp = nt:unstructured, xtype = ejstcustom, optionsProvider = Ejst.x3.provideOptions) som baseras på den anpassade xtype ' ejstcustom':

    • ' fieldconfig' är ett config-alternativ för CQ.form.MultiField -objekt.

    • ' optionsProvider' är en konfiguration av ejstcustom widget. Den är inställd med Ejst.x3.provideOptions metod som definieras i exercises.js vid:

      /apps/extjstraining/clientlib/js/exercises.js

      och returnerar 2 alternativ.

  • Definieras av multifield nod vid:

    /apps/extjstraining/components/customwidgets/multifield

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/customwidgets/multifield.-1.json

Den anpassade widgeten för flera fält (xtype = ejstcustom):

  • Är ett javascript-objekt anropat Ejst.CustomWidget.

  • Är definierad i CustomWidget.js javascript-fil på:

    /apps/extjstraining/clientlib/js/CustomWidget.js

  • Utökar CQ.form.CompositeField widget.

  • Har tre fält: hiddenField (textfält), allowField (ComboBox) och otherField (Textfält)

  • Åsidosättningar CQ.Ext.Component#initComponent så här lägger du till de tre fälten:

    • allowField är en CQ.form.Selection objekt av typen 'select'. optionsProvider är en konfiguration av Selection-objektet som initieras med optionsProvider-konfigurationen för CustomWidget som definierats i dialogrutan
    • otherField är en CQ.Ext.form.TextField object
  • Åsidosätter metoderna setValue, getValue och getRawValue av CQ.form.CompositeField för att ställa in och hämta värdet för CustomWidget med formatet:

    <allowField value>/<otherField value>, e.g.: 'Bla1/hello'.

  • Registrerar sig själv som ejstcustom' xtype:

    CQ.Ext.reg('ejstcustom', Ejst.CustomWidget);

The Anpassat multifält widgetbaserad dialogruta visas enligt följande:

screen_shot_2012-02-01at115840am

Exempel 2: Widget för anpassad trädbläddring example-custom-treebrowse-widget

Den anpassade Treebrowse widgetbaserad dialogruta visar ett fönster med en flik som innehåller en anpassad widget för sökvägsurfning: När du klickar på pilen öppnas ett fönster där du kan bläddra i en hierarki och markera ett objekt. Sökvägen för objektet läggs sedan till i sökvägsfältet och bevaras när dialogrutan stängs.

Dialogrutan för anpassad trädbläddring:

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = dialog).

  • Visar en flikpanelswidget (nodtyp = cq:Widget, xtype = tabpanel) som innehåller en panel (nodtyp = cq:Widget, xtype = panel).

  • Panelen har en anpassad widget (nodtyp = cq:Widget, xtype = ejstbrowse)

  • Definieras av treebrowse nod vid:

    /apps/extjstraining/components/customwidgets/treebrowse

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/customwidgets/treebrowse.-1.json

Widgeten för anpassad webbläsare (xtype = ejstbrowse):

  • Är ett javascript-objekt anropat Ejst.CustomWidget.

  • Är definierad i CustomBrowseField.js javascript-fil på:

    /apps/extjstraining/clientlib/js/CustomBrowseField.js

  • Utökar CQ.Ext.form.TriggerField.

  • Definierar ett bläddringsfönster med namnet browseWindow.

  • Åsidosättningar CQ.Ext.form.TriggerField för att visa bläddringsfönstret när någon klickar på pilen.

  • Definierar en CQ.Ext.tree.TreePanel objekt:

    • Den hämtar sina data genom att anropa den server som är registrerad på /bin/wcm/siteadmin/tree.json.
    • Dess rot är " apps/extjstraining".
  • Definierar en window objekt (CQ.Ext.Window):

    • Baserat på den fördefinierade panelen.
    • Har en OK som anger värdet för den markerade banan och döljer panelen.
  • Fönstret är förankrat under Bana fält.

  • Den valda sökvägen skickas från bläddringsfältet till fönstret på show -händelse.

  • Registrerar sig själv som ejstbrowse' xtype:

    CQ.Ext.reg('ejstbrowse', Ejst.CustomBrowseField);

Så här använder du Anpassad trädbläddring widgetbaserad dialogruta:

  1. Ersätta dialogrutan Anpassade widgetar med Anpassad trädbläddring dialog:

    följer de steg som beskrivs för Exempel 2: Dialogrutan En panel

  2. Redigera komponenten: dialogrutan visas enligt följande:

screen_shot_2012-02-01at120104pm

Exempel 3: RTE-plugin (Rich Text Editor) example-rich-text-editor-rte-plug-in

The RTE-plugin (Rich Text Editor) är en dialogruta som är baserad på RTF-redigeraren och som har en egen knapp för att infoga text inom hakparenteser. Den anpassade texten kan tolkas av en del logik på serversidan (som inte implementeras i det här exemplet), till exempel för att lägga till text som definieras i den angivna sökvägen:

The RTE-plugin baserad dialogruta:

  • Definieras av plugin-programnoden på:

    /apps/extjstraining/components/customwidgets/rteplugin

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/customwidgets/rteplugin.-1.json

  • The rtePlugins noden har en underordnad nod inserttext (nodtyp = nt:unstructured) som namnges efter plugin-programmet. Den har en egenskap som heter features, som definierar vilka av plugin-programfunktionerna som är tillgängliga för RTE.

RTE-plugin:

  • Är ett javascript-objekt anropat Ejst.InsertTextPlugin.

  • Är definierad i InsertTextPlugin.js javascript-fil på:

    /apps/extjstraining/clientlib/js/InsertTextPlugin.js

  • Utökar CQ.form.rte.plugins.Plugin -objekt.

  • Följande metoder definierar CQ.form.rte.plugins.Plugin -objekt och åsidosätts i implementerings-plugin-programmet:

    • getFeatures() returnerar en array med alla funktioner som plugin-programmet gör tillgängliga.
    • initializeUI() lägger till den nya knappen i verktygsfältet för textredigering.
    • notifyPluginConfig() visar rubrik och text när knappen hovras.
    • execute() anropas när någon klickar på knappen och utför plug-in-åtgärden: visas ett fönster som används för att definiera texten som ska inkluderas.
  • insertText() infogar en text med hjälp av motsvarande dialogobjekt Ejst.InsertTextPlugin.Dialog (se efteråt).

  • executeInsertText() anropas av apply() metod i dialogrutan som aktiveras när OK klickas på knappen.

  • Registrerar sig själv som inserttext' plugin:

    CQ.form.rte.plugins.PluginRegistry.register("inserttext", Ejst.InsertTextPlugin);

  • den Ejst.InsertTextPlugin.Dialog -objektet definierar den dialogruta som öppnas när plugin-knappen klickas. Dialogrutan består av en panel, ett formulär, ett textfält och två knappar (OK och Avbryt).

Så här använder du RTE-plugin (Rich Text Editor) baserad dialogruta:

  1. Ersätta dialogrutan Anpassade widgetar med RTE-plugin (Rich Text Editor) baserad dialogruta:

    följer de steg som beskrivs för Exempel 2: Dialogrutan En panel

  2. Redigera komponenten.

  3. Klicka på den sista ikonen till höger (den med fyra pilar). Ange en bana och klicka OK:

    Sökvägen visas inom hakparenteser ([]).

  4. Klicka OK för att stänga RTF-redigeraren.

The RTE-plugin (Rich Text Editor) visas enligt följande:

screen_shot_2012-02-01at120254pm

NOTE
I det här exemplet visas bara hur du implementerar klientdelen av logiken: platshållarna ([text]) måste sedan tolkas explicit på serversidan (t.ex. i komponent-JSP).

Översikt över träd tree-overview

En färdig lösning CQ.Ext.tree.TreePanel -objektet tillhandahåller trädstrukturerad gränssnittsrepresentation av trädstrukturerade data. Komponenten Trädöversikt som ingår i Använda ExtJS-widgetar paketet visar hur du använder TreePanel -objekt för att visa ett JCR-träd under en angiven sökväg. Själva fönstret kan dockas/avdockas. I det här exemplet är fönsterlogiken inbäddad i komponenten jsp mellan <script></script> -taggar.

Inkludera Översikt över träd -komponent till exempelsidan:

  1. Lägg till 4. Översikt över träd till exempelsidan från Använda ExtJS-widgetar i Sidekick.

  2. Komponenten visar:

    • en titel, med text
    • en EGENSKAPER-länk: klicka för att visa egenskaperna för det stycke som lagras i databasen. Klicka igen för att dölja egenskaperna.
    • ett flytande fönster med en trädrepresentation av databasen som kan expanderas.

Komponenten visas enligt följande:

screen_shot_2012-02-01at120639pm

Komponenten Trädöversikt:

  • Definieras vid:

    /apps/extjstraining/components/treeoverview

  • I dialogrutan kan du ange fönstrets storlek och docka/avdocka fönstret (se informationen nedan).

Komponenten jsp:

  • Hämtar egenskaperna width, height och dockad från databasen.

  • Visar text om trädöversiktens dataformat.

  • Bäddar in fönsterlogiken i komponent-jsp mellan javascript-taggar.

  • Definieras vid:

    apps/extjstraining/components/treeoverview/content.jsp

JavaScript-koden som är inbäddad i komponent-jsp:

  • Definierar en tree genom att försöka hämta ett trädfönster från sidan.

  • Om fönstret som visar trädet inte finns, treePanel (CQ.Ext.tree.TreePanel) skapas:

    • treePanel innehåller de data som används för att skapa fönstret.

    • Data hämtas genom att anropa servern som är registrerad på:

      /bin/wcm/siteadmin/tree.json

  • The beforeload avlyssnaren kontrollerar att den klickade noden är inläst.

  • The root objektet anger sökvägen apps/extjstraining som trädroten.

  • tree (CQ.Ext.Window) anges baserat på fördefinierade treePaneloch visas med:

    tree.show();

  • Om fönstret redan finns visas det baserat på egenskaperna width, height och dockad som hämtats från databasen.

Komponentdialogrutan:

  • Visar en flik med två fält som anger storleken (bredd och höjd) för trädöversiktsfönstret och ett fält som dockar/avdockar fönstret

  • Definieras av en nod (nodtyp = cq:Dialog, xtype = panel).

  • Panelen har en widget för storleksfält (nodtyp = cq:Widget, xtype = sizefield) och en markeringswidget (nodtyp = cq:Widget, xtype = selection, typ = radio) med 2 alternativ (true/false)

  • Definieras av dialognoden vid:

    /apps/extjstraining/components/treeoverview/dialog

  • Renderas i json-format genom att begära:

    http://localhost:4502/apps/extjstraining/components/treeoverview/dialog.-1.json

  • Visar följande:

screen_shot_2012-02-01at120745pm

Översikt över stödraster grid-overview

En rutnätspanel representerar data i tabellformat för rader och kolumner. Den består av följande:

  • Butik: Den modell som innehåller dataposterna (rader).
  • Kolumnmodell: kolumnmakeup.
  • Visa: kapslar in användargränssnittet.
  • Markeringsmodell: markeringsbeteendet.

Stödrasteröversiktskomponenten som ingår i Använda ExtJS-widgetar paketet visar hur du visar data i tabellformat:

  • I exempel 1 används statiska data.
  • I exempel 2 används data som hämtats från databasen.

Så här tar du med komponenten Stödrasteröversikt till exempelsidan:

  1. Lägg till 5. Översikt över stödraster till exempelsidan från Använda ExtJS-widgetar i Sidekick.

  2. Komponenten visar:

    • en titel med text
    • a EGENSKAPER länk: klicka för att visa egenskaperna för det stycke som lagras i databasen. Click again to hide the properties.
    • ett flytande fönster som innehåller data i tabellformat.

Komponenten visas enligt följande:

screen_shot_2012-02-01at121109pm

Exempel 1: Standardstödraster example-default-grid

I den färdiga versionen visar Stödrasteröversikt -komponenten ett fönster med statiska data i tabellformat. I det här exemplet är logiken inbäddad i komponentjsp på två sätt:

  • den generiska logiken definieras mellan <script></script>-taggar
  • den specifika logiken finns i en separat .js-fil och är länkad till den i jsp-filen. Med den här inställningen kan du enkelt växla mellan de två logiken (statisk/dynamisk) genom att kommentera de önskade <script>-taggarna.

Komponenten Stödrasteröversikt:

  • Definieras vid:

    /apps/extjstraining/components/gridoverview

  • I dialogrutan kan du ange fönstrets storlek och docka/avdocka fönstret.

Komponenten jsp:

  • Hämtar egenskaperna width, height och dockad från databasen.

  • Visar text som introduktion till dataformatet för översiktsrutnät.

  • References javascript code that defines the GridPanel object:

    <script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script>

    defaultgrid.js

  • Embeds javascript code between javascript tags that defines the Window object consuming the GridPanel object.

  • Definieras vid:

    apps/extjstraining/components/gridoverview/content.jsp

JavaScript-koden som är inbäddad i komponent-jsp:

  • Definierar grid genom att försöka hämta fönsterkomponenten från sidan:

    var grid = CQ.Ext.getCmp("<%= node.getName() %>-grid");

  • If grid finns inte, CQ.Ext.grid.GridPanel objekt ( gridPanel) definieras genom att anropa getGridPanel() metod (se nedan). Den här metoden definieras i defaultgrid.js.

  • grid är en CQ.Ext.Window-objekt, baserat på den fördefinierade GridPanel, och visas: grid.show();

  • If grid finns redan, visas den baserat på bredd, höjd och dockade egenskaper som hämtats från databasen.

JavaScript-filen ( defaultgrid.js) som refereras i komponenten jsp definierar getGridPanel() som anropas av skriptet som är inbäddat i JSP och returnerar en CQ.Ext.grid.GridPanel -objekt, baserat på statiska data. Logiken är följande:

  • myData är en array med statiska data som formaterats som en tabell med 5 kolumner och 4 rader.

  • store är en CQ.Ext.data.Store objekt som förbrukar myData.

  • store har lästs in i minnet:

    store.load();

  • gridPanel är en CQ.Ext.grid.GridPanel objekt som förbrukar store:

    • kolumnbredderna ändras alltid:

      forceFit: true

    • bara en rad åt gången kan markeras:

      singleSelect:true

Exempel 2: Referenssökstödraster example-reference-search-grid

När du installerar paketet content.jsp i Översikt över stödraster -komponenten visar ett rutnät som baseras på statiska data. Det går att ändra komponenten så att ett rutnät visas med följande egenskaper:

  • Har tre kolumner.
  • Baseras på data som hämtats från databasen genom att anropa en server.
  • Cellerna i den sista kolumnen kan redigeras. Värdet sparas i en test egenskapen under noden som definieras av sökvägen som visas i den första kolumnen.

Fönsterobjektet får sin CQ.Ext.grid.GridPanel genom att anropa getGridPanel() metod som definieras i defaultgrid.js fil på /apps/extjstraining/components/gridoverview/defaultgrid.js. The Översikt över stödraster innehåller en annan implementering för getGridPanel() metod, definition i referencesearch.js fil på /apps/extjstraining/components/gridoverview/referencesearch.js. Genom att byta .js-fil som refereras i komponentens jsp, kommer rutnätet att baseras på data som hämtas från databasen.

Byt .js-fil som refereras i komponent-jsp:

  1. I CRXDE Lite, i content.jsp komponentfilen, kommentera raden som innehåller defaultgrid.js så att den ser ut så här:

    <!-- script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script-->

  2. Ta bort kommentaren från raden som innehåller referencesearch.js så att den ser ut så här:

    <script type="text/javascript" src="/apps/extjstraining/components/gridoverview/referencesearch.js"></script>

  3. Spara ändringarna.

  4. Uppdatera exempelsidan.

Komponenten visas enligt följande:

screen_shot_2012-02-01at121429pm

JavaScript-koden som komponenten jsp refererar till (referencesearch.js) definierar getGridPanel() metod som anropas från komponenten jsp och returnerar en CQ.Ext.grid.GridPanel -objekt, baserat på data som hämtas dynamiskt från databasen. Logiken i referencesearch.js definierar vissa dynamiska data som bas för GridPanel:

  • reader är en CQ.Ext.data.JsonReader objekt som läser serverletssvaret i json-format för 3 kolumner.

  • cm är en CQ.Ext.grid.ColumnModel -objekt för 3 kolumner.

    Kolumncellerna i kolumnen"Testa" kan redigeras så som de definieras med en redigerare:

    editor: new CQ.Ext.form.TextField({})

  • kolumnerna kan sorteras:

    cm.defaultSortable = true;

  • store är en CQ.Ext.data.GroupingStore objekt:

    • hämtar data genom att anropa den server som är registrerad på " /bin/querybuilder.json" med några parametrar som används för att filtrera frågan
    • baseras på reader, definierad i förväg
    • tabellen sorteras enligt 'jcr:sökväg' kolumn i stigande ordning
  • gridPanel är en CQ.Ext.grid.EditorGridPanel objekt som kan redigeras:

    • baseras på den fördefinierade store och i kolumnmodellen cm

    • bara en rad åt gången kan markeras:

      sm: new CQ.Ext.grid.RowSelectionModel({singleSelect:true})

    • den afteredit avlyssnaren ser till att efter en cell i Testa kolumnen har redigerats:

      • egenskapen ' test' för noden vid sökvägen som definieras av "jcr:sökväg" -kolumnen ställs in i databasen med cellens värde
      • om POSTEN lyckas läggs värdet till i store objekt, annars avvisas det
recommendation-more-help
2315f3f5-cb4a-4530-9999-30c8319c520e