Sie sehen sich Hilfeinhalte der folgenden Version an:

Die webbasierte Oberfläche von Adobe Experience Manager nutzt AJAX und andere moderne Browsertechnologien, um WYSIWYG-Bearbeitung und -Formatierung von Inhalten durch Autoren direkt auf der Webseite zu ermöglichen.

Adobe Experience Manager (AEM) verwendet die ExtJS-Widgetbibliothek, die die besonders ausgereiften Benutzeroberflächenelemente bereitstellt, die in allen wichtigen Browsern funktionieren und die Erstellung von Benutzeroberflächen in Desktopqualität ermöglichen.

Diese Widgets sind in AEM enthalten und können nicht nur von AEM, sondern auch von jeder mit AEM erstellten Website verwendet werden.

Eine vollständige Übersicht aller verfügbaren Widgets in AEM finden Sie in der Widget-API-Dokumentation oder der Liste der bestehenden X-Typen. Darüber hinaus zeigen zahlreiche Beispiele auf der Website von Sencha, dem Eigentümer des Frameworks, wie das ExtJS-Framework zu verwenden ist.

Auf dieser Seite erhalten Sie einige Einblicke in die Verwendung und Erweiterung von Widgets. Zuerst wird beschrieben, wie clientseitiger Code in eine Seite eingefügt wird. Dann werden einige Beispielkomponenten beschrieben, die erstellt wurden, um einige grundlegende Anwendungs- und Erweiterungsfälle zu illustrieren. Diese Komponenten stehen als das Paket Using ExtJS Widgets auf Package Share zur Verfügung.

Das Paket enthält Beispiele für:

Hinweis:

Die klassische Benutzeroberfläche von Adobe Experience Manager baut auf ExtJS 3.4.0 auf.

Hinweis:

Diese Seite beschreibt die Verwendung von Widgets in der klassischen Benutzeroberfläche. Adobe empfiehlt, die moderne Touch-optimierte Benutzeroberfläche zu verwenden, die auf Coral-Benutzeroberfläche und Granite-Benutzeroberfläche basiert.

Einbauen von clientseitigem Code in eine Seite

Clientseitiger JavaScript- und Stylesheet-Code muss in einer Client-Bibliothek platziert werden.

Erstellen Sie eine Client-Bibliothek wie folgt:

  1. Erstellen Sie einen Knoten unterhalb von /apps/<Projekt> mit den folgenden Einstellungen:
    • name="clientlib"
    • jcr:mixinTypes="[mix:lockable]"
    • jcr:primaryType="cq:ClientLibraryFolder"
    • sling:resourceType="widgets/clientlib"
    • categories="[<Kategoriename>]"
    • dependencies="[cq.widgets]"
    Hinweis: <Kategoriename> ist der Name der benutzerdefinierten Bibliothek (z. B. „cq.extjstraining“) und wird verwendet, um die Bibliothek in die Seite einzufügen.
  2. Erstellen Sie unterhalb von clientlib die Ordner css und js (nt:folder).
  3. Erstellen Sie unterhalb von clientlib die Dateien css.txt und js.txt (nt:files). Diese TXT-Dateien listen die Dateien auf, die in der Bibliothek enthalten sind.
  4. Bearbeiten Sie js.txt: Sie muss mit „#base=js“ beginnen, worauf eine Liste der Dateien folgen soll, die vom CQ-Client-Bibliotheksdienst zusammengefasst werden sollen, z. B.
    #base=js
    components.js
    exercises.js
    CustomWidget.js
    CustomBrowseField.js
    InsertTextPlugin.js
  5. Bearbeiten Sie ccs.txt: Sie muss mit „#base=ccs“ beginnen, worauf eine Liste der Dateien folgen soll, die vom CQ-Client-Bibliotheksdienst zusammengefasst werden sollen, z. B.
    #base=css
    components.css
  6. Platzieren Sie die JavaScript-Dateien, die der Bibliothek angehören, unterhalb des Ordners js.
  7. Platzieren Sie die CSS-Dateien und die von ihnen verwendeten Ressourcen (z. B. mein_Symbol.png) unterhalb des Ordners css.

Hinweis:

Die oben beschriebene Verarbeitung von Stylesheets ist optional.

Fügen Sie die Client-Bibliothek wie folgt in die Seitenkomponenten-JSP ein:

  • Um nur JavaScript-Code und Stylesheets einzufügen:
    <ui:includeClientLib categories="<Kategoriename1>, <Kategoriename2>, ..."/>
    , wobei <KategorienameX> der Name der clientseitigen Bibliothek ist.
  • Um nur JavaScript-Code einzufügen:
    <ui:includeClientLib js="<Kategoriename>"/>

Weitere Informationen finden Sie in der Beschreibung des Tags <ui:includeClientLib>.

In manchen Fällen darf eine Client-Bibliothek nur im Autorenmodus verfügbar sein und muss im Veröffentlichungsmodus ausgeschlossen werden. Dies erreichen Sie wie folgt:

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

Erste Schritte mit den Beispielen

Zum Durchführen der Übungen auf dieser Seite installieren Sie das Paket Using ExtJS Widgets auf einer lokalen AEM-Instanz und erstellen eine Beispielseite, auf der auch Komponenten eingefügt werden. Gehen Sie dazu wie folgt vor:

  1. Laden Sie in Ihrer AEM-Instanz das Paket Using ExtJS Widgets (v01) von Package Share herunter und installieren Sie es. Dabei wird im Repository unter /apps das Projekt extjstraining erstellt.
  2. Schließen Sie die Client-Bibliothek ein, die die Skripte (js) und das Stylesheet (css) im head-Tag der geometrixx-Seiten-JSP umfasst, da Sie die Beispielkomponenten auf einer neuen Seite der Geometrixx-Verzweigung einschließen werden:
    Öffnen Sie in CRXDE Lite die Datei /apps/geometrixx/components/page/headlibs.jsp und fügen Sie die Kategorie cq.extjstraining dem bestehenden Tag <ui:includeClientLib> wie folgt hinzu:
    %><ui:includeClientLib categories="apps.geometrixx-main, cq.extjstraining"/><%
  3. Erstellen Sie eine neue Seite in der Geometrixx-Verzweigung unter /content/geometrixx/de/products und nennen Sie sie Using ExtJS Widgets.
  4. Wechseln Sie in den Designmodus und fügen Sie alle Komponenten der Gruppe Using ExtJS Widgets dem Design von Geometrixx hinzu.
  5. Wechseln Sie zurück in den Bearbeitungsmodus: Die Komponenten der Gruppe Using ExtJS Widgets stehen im Sidekick zur Verfügung.

Hinweis:

Die Beispiele auf dieser Seite basieren auf dem Geometrixx-Beispielinhalt, der nicht mehr im Lieferumfang von AEM enthalten ist, da er durch We.Retail ersetzt wurde. Im Dokument We.Retail-Referenzimplementierung finden Sie Informationen zum Herunterladen und Installieren von Geometrixx.

Grundlegende Dialogfelder

Dialogfelder werden in der Regel verwendet, um Inhalte zu bearbeiten, aber auch nur zum Anzeigen von Informationen. Eine einfache Möglichkeit zum Anzeigen eines vollständigen Dialogfelds besteht darin, auf seine Darstellung im JSON-Format zuzugreifen. Verweisen Sie dazu Ihren Browser auf:

http://localhost:4502/<Pfad-zum-Dialogfeld>.-1.json

Die erste Komponente der Gruppe Using ExtJS Widgets im Sidekick wird mit 1. Dialog Basics bezeichnet und umfasst vier grundlegende Dialogfelder, die mit standardmäßigen Widgets und ohne modifizierte JavaScript-Logik erstellt wurden. Die Dialogfelder werden unter /apps/extjstraining/components/dialogbasics gespeichert. Die grundlegenden Dialogfelder sind:

  • das Dialogfeld „Full“ (Knoten full): Es zeigt ein Fenster mit drei Registerkarten mit jeweils zwei Textfeldern an.
  • das Dialogfeld „Single Panel“ (Knoten singlepanel): Es zeigt ein Fenster mit einer Registerkarte mit zwei Textfeldern an.
  • das Dialogfeld „Multi Panel“ (Knoten multipanel): Es zeigt dasselbe an wie das Dialogfeld „Full“, ist aber anders aufgebaut.
  • das Dialogfeld „Design“ (Knoten design): Es zeigt ein Fenster mit zwei Registerkarten an. Die erste Registerkarte weist ein Textfeld auf, ein Dropdown-Menü und einen ausblendbaren Textbereich. Die zweite Registerkarte verfügt über einen Feldsatz mit vier Textfeldern und einen ausblendbaren Feldsatz mit zwei Textfeldern.

Fügen Sie die Komponente 1. Dialog Basics der Beispielseite hinzu:

  1. Fügen Sie die Komponente 1. Dialog Basics der Beispielseite aus der Registerkarte Using ExtJS Widgets im Sidekick hinzu.
  2. Die Komponente zeigt einen Titel, etwas Text und einen Link EIGENSCHAFTEN: Klicken Sie auf den Link, um die Eigenschaften des im Repository gespeicherten Absatzes anzuzeigen. Klicken Sie erneut auf den Link, um die Eigenschaften zu verbergen.

Die Komponente wird wie im Folgenden dargestellt:

chlimage_1

Beispiel 1: Dialogfeld „Full“

Das Dialogfeld Full zeigt ein Fenster mit drei Registerkarten mit jeweils zwei Textfeldern. Es ist das Standarddialogfeld der Komponente Dialog Basics. Die Eigenschaften sind:

  • Wird von einem Knoten definiert: node type = cq:Dialog, xtype = dialog.
  • Zeigt drei Registerkarten (node type = cq:Panel).
  • Jede Registerkarte weist zwei Textfelder auf (node type = cq:Widget, xtype = textfield).
  • Wird definiert durch den Knoten:
    /apps/extjstraining/components/dialogbasics/full
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/dialogbasics/full.-1.json

Das Dialogfeld wird wie im Folgenden dargestellt:

screen_shot_2012-01-31at45411pm

Beispiel 2: Dialogfeld „Single Panel“

Das Dialogfeld Single Panel zeigt ein Fenster mit einer Registerkarte und zwei Textfeldern an. Die Eigenschaften sind:

  • Zeigt eine Registerkarte (node type = cq:Dialog, xtype = panel)
  • Die Registerkarte weist zwei Textfelder auf (node type = cq:Widget, xtype = textfield)
  • Wird definiert durch den Knoten:
    /apps/extjstraining/components/dialogbasics/singlepanel
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/dialogbasics/singlepanel.-1.json
  • Ein Vorteil gegenüber dem Dialogfeld Full besteht darin, dass weniger Konfiguration erforderlich ist.
  • Empfohlene Verwendung: für einfache Dialogfelder, die Informationen anzeigen oder nur wenige Felder aufweisen.

So verwenden Sie das Dialogfeld „Single Panel“:

  1. Ersetzen Sie das Dialogfeld der Komponente Dialog Basics durch das Dialogfeld Single Panel:
    1. Löschen Sie in CRXDE Lite den Knoten: /apps/extjstraining/components/dialogbasics/dialog
    2. Klicken Sie auf Alle speichern, um die Änderungen zu speichern.
    3. Kopieren Sie den Knoten: /apps/extjstraining/components/dialogbasics/singlepanel
    4. Fügen Sie den kopierten Knoten ein unter: /apps/extjstraining/components/dialogbasics
    5. Wählen Sie den Knoten /apps/extjstraining/components/dialogbasics/Copy of singlepanel aus und benennen Sie ihn um in dialog.
  2. Bearbeiten Sie die Komponente: Das Dialogfeld wird wie im Folgenden dargestellt:
screen_shot_2012-01-31at45952pm

Beispiel 3: Dialogfeld „Multi Panel“

Das Dialogfeld Multi Panel zeigt dasselbe wie das Dialogfeld Full, ist aber anders aufgebaut. Die Eigenschaften sind:

  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = tabpanel)
  • Zeigt drei Registerkarten (node type = cq:Panel).
  • Jede Registerkarte weist zwei Textfelder auf (node type = cq:Widget, xtype = textfield).
  • Wird definiert durch den Knoten:
    /apps/extjstraining/components/dialogbasics/multipanel
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/dialogbasics/multipanel.-1.json
  • Ein Vorteil gegenüber dem Dialogfeld Full besteht in der vereinfachten Struktur.
  • Empfohlene Verwendung: für Dialogfelder mit mehreren Registerkarten.

Das Dialogfeld „Multi-Panel“ verwenden Sie wie folgt:

  1. Ersetzen Sie das Dialogfeld der Komponente Dialog Basics durch das Dialogfeld Multi Panel:
    Führen Sie die in Beispiel 2: Dialogfeld „Single Panel“ beschriebenen Schritte aus.
  2. Bearbeiten Sie die Komponente: Das Dialogfeld wird wie im Folgenden dargestellt:
screen_shot_2012-01-31at50119pm

Beispiel 4: Dialogfeld „Rich“

Das Dialogfeld Rich zeigt ein Fenster mit zwei Registerkarten an. Die erste Registerkarte weist ein Textfeld auf, ein Dropdown-Menü und einen ausblendbaren Textbereich. Die zweite Registerkarte verfügt über einen Feldsatz mit vier Textfeldern und einen ausblendbaren Feldsatz mit zwei Textfeldern. Die Eigenschaften sind:

  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = dialog).
  • Zeigt zwei Registerkarten (node type = cq:Panel).
  • Die erste Registerkarte verfügt über ein dialogfieldset-Widget mit einem textfield- und einem selection-Widget mit drei Optionen sowie ein ausblendbares dialogfieldset mit einem textarea-Widget.
  • Die zweite Registerkarte verfügt über ein dialogfieldset-Widget mit vier textfield-Widgets und ein ausblendbares dialogfieldset mit zwei textfield-Widgets.
  • Wird definiert durch den Knoten:
    /apps/extjstraining/components/dialogbasics/rich
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/dialogbasics/rich.-1.json

So verwenden Sie das Dialogfeld Rich:

  1. Ersetzen Sie das Dialogfeld der Komponente Dialog Basics durch das Dialogfeld Rich:
    Führen Sie die in Beispiel 2: Dialogfeld „Single Panel“ beschriebenen Schritte aus.
  2. Bearbeiten Sie die Komponente: Das Dialogfeld wird wie im Folgenden dargestellt:
screen_shot_2012-01-31at50429pm
screen_shot_2012-01-31at50519pm

Dynamische Dialogfelder

Die zweite Komponente der Gruppe Using ExtJS Widgets im Sidekick heißt 2. Dynamic Dialogs und umfasst drei dynamische Dialogfelder, die mit standardmäßigen Widgets und modifizierter JavaScript-Logik erstellt wurden. Die Dialogfelder werden unter /apps/extjstraining/components/dynamicdialogs gespeichert. Die dynamischen Dialogfelder sind:

  • das Dialogfeld „Switch Tabs“ (Knoten switchtabs): Es zeigt ein Fenster mit zwei Registerkarten. Die erste Registerkarte weist eine Navigationsauswahl mit drei Optionen auf: Wenn eine Option ausgewählt ist, wird eine Registerkarte zu der Option angezeigt. Die zweite Registerkarte weist zwei Textfelder auf.
  • das Dialogfeld „Arbitrary“ (Knoten arbitrary): Es zeigt ein Fenster mit einer Registerkarte an. Die Registerkarte verfügt über ein Feld, in das Sie Assets ziehen oder hochladen können, und ein Feld, das Informationen über die Seite, die es umfasst, und das Asset (falls auf eines verwiesen wird) anzeigt.
  • das Dialogfeld „Toggle Fields“ (Knoten togglefield): Es zeigt ein Fenster mit einer Registerkarte. Die Registerkarte verfügt über ein Kontrollkästchen: Ist es aktiviert, wird ein Feldsatz mit zwei Textfeldern angezeigt.

Fügen Sie die Komponente 2. Dynamic Dialogs wie folgt der Beispielseite hinzu:

  1. Fügen Sie die Komponente 2. Dynamic Dialogs der Beispielseite aus der Registerkarte Using ExtJS Widgets im Sidekick hinzu.
  2. Die Komponente zeigt einen Titel, etwas Text und einen Link EIGENSCHAFTEN: Klicken Sie, um die Eigenschaften des im Repository gespeicherten Absatzes anzuzeigen. Klicken Sie erneut, um die Eigenschaften zu verbergen.

Die Komponente wird wie im Folgenden dargestellt:

chlimage_1

Beispiel 1: Dialogfeld „Switch Tabs“

Das Dialogfeld Switch Tabs zeigt ein Fenster mit zwei Registerkarten an. Die erste Registerkarte weist eine Navigationsauswahl mit drei Optionen auf: Wenn eine Option ausgewählt ist, wird eine Registerkarte zu der Option angezeigt. Die zweite Registerkarte weist zwei Textfelder auf.

Die wichtigsten Eigenschaften sind:

  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = dialog).
  • Zeigt zwei Registerkarten (node type = cq:Panel): eine Auswahlregisterkarte und eine zweite Registerkarte, die von der Auswahl auf der ersten Registerkarte abhängt (drei Optionen).
  • Weist drei optionale Registerkarten (node type = cq:Panel) mit jeweils zwei Textfeldern (node type = cq:Widget, xtype = textfield) auf. Es wird jeweils nur eine optionale Registerkarte angezeigt.
  • Wird definiert durch den Knoten switchtabs unter:
    /apps/extjstraining/components/dynamicdialogs/switchtabs
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/dynamicdialogs/switchtabs.-1.json

Die Logik wird wie folgt durch Ereignis-Listener und JavaScript-Code implementiert:

  • Der Dialogfeldknoten weist einen beforeshow-Listener auf, der alle optionalen Registerkarten ausblendet, bevor das Dialogfeld angezeigt wird:
    beforeshow="function(dialog){Ejst.x2.manageTabs(dialog.items.get(0));}"
    dialog.items.get(0) ruft das Registerkartenbedienfeld ab, das das Auswahlbedienfeld und die drei optionalen Bedienfelder enthält.
  • Das Objekt Ejst.x2 wird definiert in der Datei exercises.js unter:
    /apps/extjstraining/clientlib/js/exercises.js
  • In der Methode Ejst.x2.manageTabs() werden alle optionalen Registerkarten ausgeblendet, weil der Wert von index „-1“ ist (i umfasst den Bereich von 1 bis 3).
  • Die Auswahlregisterkarte weist zwei Listener auf: Einer zeigt die ausgewählte Registerkarte, wenn das ausgewählte Dialogfeld geladen wird (Ereignis „loadcontent“), und einer zeigt die ausgewählte Registerkarte, wenn die Auswahl geändert wird (Ereignis „selectionchanged“):
    loadcontent="function(field,rec,path){Ejst.x2.showTab(field);}"
     selectionchanged="function(field,value){Ejst.x2.showTab(field);}"
  • In der Methode Ejst.x2.showTab():
    ruft field.findParentByType('tabpanel') das Registerkartenbedienfeld ab, das alle Registerkarten enthält (field stellt das Auswahl-Widget dar).
    ruft field.getValue() den Wert der Auswahl ab, z. B. tab2.
    zeigt Ejst.x2.manageTabs() die ausgewählte Registerkarte an.
  • Jede optionale Registerkarte verfügt über einen Listener, der die Registerkarte beim Ereignis „render“ ausblendet:
    render="function(tab){Ejst.x2.hideTab(tab);}"
  • In der Methode Ejst.x2.hideTab():
    ist tabPanel das Registerkartenbedienfeld, das alle Registerkarten enthält.
    ist index der Index der optionalen Registerkarte.
    blendet tabPanel.hideTabStripItem(index) die Registerkarte aus.

Dies wird wie folgt angezeigt:

screen_shot_2012-02-01at114745am

Beispiel 2: Dialogfeld „Arbitrary“

Sehr oft zeigt ein Dialogfeld Inhalte aus der zugrunde liegenden Komponente an.  Das hier beschriebene Dialogfeld Arbitrary zeigt Inhalte aus einer anderen Komponente an.

Das Dialogfeld Arbitrary zeigt ein Fenster mit einer Registerkarte an. Die Registerkarte verfügt über zwei Felder: eines, in das Sie Assets ziehen oder hochladen können, und eines, das Informationen über die Seite, die es umfasst, und das Asset (falls auf eines verwiesen wird) anzeigt.

Die wichtigsten Eigenschaften sind:

  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = dialog).
  • Zeigt ein tabpanel-Widget (node type = cq:Widget, xtype = tabpanel) mit einem Bedienfeld (node type = cq:Panel)
  • Das Bedienfeld verfügt über ein smartfile-Widget (node type = cq:Widget, xtype = smartfile) und ein ownerdraw-Widget (node type = cq:Widget, xtype = ownerdraw)
  • Wird definiert durch den Knoten arbitrary unter:
    /apps/extjstraining/components/dynamicdialogs/arbitrary
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/dynamicdialogs/arbitrary.-1.json

Die Logik wird wie folgt durch Ereignis-Listener und JavaScript-Code implementiert:

  • Das ownerdraw-Widget verfügt über einen „loadcontent“-Listener, der Informationen über die Seite zeigt, die die Komponente und das Asset enthält, auf die vom smartfile-Widget verwiesen wird, wenn der Inhalt geladen wird:
    loadcontent="function(field,rec,path){Ejst.x2.showInfo(field,rec,path);}"
    field wird mit dem ownerdraw-Objekt festgelegt
    path wird mit dem Inhalts-Pfad der Komponente festgelegt (z. B.: /content/geometrixx/de/products/triangle/ui-tutorial/jcr:content/par/dynamicdialogs)
  • Das Objekt Ejst.x2 wird definiert in der Datei exercises.js unter:
    /apps/extjstraining/clientlib/js/exercises.js
  • In der Methode Ejst.x2.showInfo():
    ist pagePath der Pfad der Seite, die die Komponente enthält.
    stellt pageInfo die Seiteneigenschaften im JSON-Format dar.
    ist reference der Pfad des referenzierten Assets.
    stellt metadata die Metadaten des Assets im JSON-Format dar.
    zeigt ownerdraw.getEl().update(html); die erstellte HTML im Dialogfeld dar.

So verwenden Sie das Dialogfeld Arbitrary:

  1. Ersetzen Sie das Dialogfeld der Komponente Dynamic Dialog durch das Dialogfeld Arbitrary:
    Führen Sie die in Beispiel 2: Dialogfeld „Single Panel“ beschriebenen Schritte aus.
  2. Bearbeiten Sie die Komponente: Das Dialogfeld wird wie im Folgenden dargestellt:
screen_shot_2012-02-01at115300am

Beispiel 3: Dialogfeld „Toggle Fields“

Das Dialogfeld Toggle Fields zeigt ein Fenster mit einer Registerkarte an. Die Registerkarte verfügt über ein Kontrollkästchen: Ist es aktiviert, wird ein Feldsatz mit zwei Textfeldern angezeigt.

Die wichtigsten Eigenschaften sind:

  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = dialog).
  • Zeigt ein tabpanel-Widget (node type = cq:Widget, xtype = tabpanel) mit einem Bedienfeld (node type = cq:Panel).
  • Das Bedienfeld weist ein selection-/checkbox-Widget (node type = cq:Widget, xtype = selection, type = checkbox) und ein ausblendbares (und standardmäßig ausgeblendetes) dialogfieldset-Widget (node type = cq:Widget, xtype = dialogfieldset) mit zwei textfield-Widgets (node type = cq:Widget, xtype = textfield) auf.
  • Wird definiert durch den Knoten togglefields unter:
    /apps/extjstraining/components/dynamicdialogs/togglefields
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/dynamicdialogs/togglefields.-1.json

Die Logik wird wie folgt durch Ereignis-Listener und JavaScript-Code implementiert:

  • Die Auswahlregisterkarte weist zwei Listener auf: Einer zeigt das dialogfieldset, wenn das ausgewählte Dialogfeld geladen wird (Ereignis „loadcontent“), und einer zeigt das dialogfieldset, wenn die Auswahl geändert wird (Ereignis „selectionchanged“):
    loadcontent="function(field,rec,path){Ejst.x2.toggleFieldSet(field);}"
     selectionchanged="function(field,value){Ejst.x2.toggleFieldSet(field);}"
  • Das Objekt Ejst.x2 wird definiert in der Datei exercises.js unter:
    /apps/extjstraining/clientlib/js/exercises.js
  • In der Methode Ejst.x2.toggleFieldSet():
    ist box das Auswahlobjekt.
    ist panel das Bedienfeld, das das selection- und das dialogfieldset-Widget enthält.
    ist fieldSet das dialogfieldset-Objekt.
    ist show der Wert der Auswahl („true“ oder „false“).
    wird das dialogfieldset anhand von „show“ angezeigt oder nicht.

So verwenden Sie das Dialogfeld Toggle Fields:

  1. Ersetzen Sie das Dialogfeld der Komponente Dynamic Dialog durch das Dialogfeld Toggle Fields:
    Führen Sie die in Beispiel 2: Dialogfeld „Single Panel“ beschriebenen Schritte aus.
  2. Bearbeiten Sie die Komponente: Das Dialogfeld wird wie im Folgenden dargestellt:
screen_shot_2012-02-01at115518am

Benutzerdefinierte Widgets

Die direkt einsatzbereiten und im Lieferumfang von AEM enthaltenen Widgets sollten die meisten Anwendungsfälle abdecken. Trotzdem kann es passieren, dass ein benutzerdefiniertes Widget erstellt werden muss, um eine projektspezifische Anforderung zu erfüllen. Benutzerdefinierte Widgets werden erstellt, indem vorhandene erweitert werden. Das Paket Using ExtJS Widgets enthält drei Dialogfelder, die drei verschiedene benutzerdefinierte Widgets verwenden, um die ersten Schritte mit der Anpassung zu vereinfachen:

  • Das Dialogfeld „Multi Field“ (Knoten multifield) zeigt ein Fenster mit einer Registerkarte. Die Registerkarte verfügt über ein benutzerdefiniertes multifield-Widget mit zwei Feldern: Ein Dropdown-Menü mit zwei Optionen und ein Textfeld. Da es auf dem im Lieferumfang enthaltenen multifield-Widget (mit nur einem Textfeld) basiert, verfügt es über alle Funktionen des multifield-Widgets.
  • Das Dialogfeld „Tree Browse“ (treebrowse-Knoten) zeigt ein Fenster mit einer Registerkarte, die ein Pfadbrowser-Widget enthält: Wenn Sie auf den Pfeil klicken, wird ein Fenster geöffnet, in dem Sie eine Hierarchie durchsuchen und ein Element auswählen können. Der Pfad des Elements wird dann dem Pfadfeld hinzugefügt und wird beibehalten, wenn das Dialogfeld geschlossen wird.
  • Ein Dialogfeld, das auf dem Rich-Text-Editor-Plug-in basiert (Knoten rteplugin) und dem Rich-Text-Editor eine benutzerdefinierte Schaltfläche hinzufügt, mit der benutzerdefinierter Text in den Haupttext eingefügt werden kann. Es besteht aus einem richtext-Widget (RTE) und einer benutzerdefinierten Funktion, die durch den RTE-Plug-in-Mechanismus hinzugefügt wird.

Die benutzerdefinierten Widgets und das Plug-in sind in der Komponente 3. Custom Widgets des Pakets Using ExtJS Widgets enthalten. Fügen Sie diese Komponente wie folgt der Beispielseite hinzu:

  1. Fügen Sie die Komponente 3. Custom Widgets der Beispielseite aus der Registerkarte Using ExtJS Widgets im Sidekick hinzu.
  2. Die Komponente zeigt einen Titel, etwas Text und, wenn Sie auf den Link EIGENSCHAFTEN klicken, die Eigenschaften des im Repository gespeicherten Absatzes an. Durch erneutes Klicken werden die Eigenschaften verborgen.
    Die Komponente wird wie im Folgenden dargestellt:
chlimage_1

Beispiel 1: Custom Multifield-Widget

Das auf dem Custom Multifield-Widget basierende Dialogfeld zeigt ein Fenster mit einer Registerkarte an. Die Registerkarte verfügt über ein benutzerdefiniertes multifield-Widget mit zwei Feldern (im Gegensatz zur Standardversion mit einem Feld): Ein Dropdown-Menü mit zwei Optionen und ein Textfeld.

Das auf dem Custom Multifield-Widget basierende Dialogfeld:

  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = dialog).
  • Zeigt ein tabpanel-Widget (node type = cq:Widget, xtype = tabpanel) mit einem Bedienfeld (node type = cq:Widget, xtype = panel).
  • Das Bedienfeld weist ein multifield-Widget (node type = cq:Widget, xtype = multifield) auf.
  • Das multifield-Widget verfügt über eine fieldconfig (node type = nt:unstructured, xtype = ejstcustom, optionsProvider = Ejst.x3.provideOptions), die auf dem benutzerdefinierten xtype „ejstcustom“ basiert:
    • fieldconfig“ ist eine Konfigurationsoption des CQ.form.MultiField-Objekts.
    • optionsProvider“ ist eine Konfiguration des ejstcustom-Widgets. Sie wird anhand der Methode Ejst.x3.provideOptions festgelegt, die in exercises.js unter:
      /apps/extjstraining/clientlib/js/exercises.js
      definiert ist und zwei Optionen zurückgibt.
  • Wird definiert durch den Knoten multifield unter
    /apps/extjstraining/components/customwidgets/multifield.
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/customwidgets/multifield.-1.json

Das benutzerdefinierte Multifield-Widget (xtype = ejstcustom):

  • Ist ein JavaScript-Objekt namens Ejst.CustomWidget.
  • Wird in der JavaScript-Datei CustomWidget.js unter
    /apps/extjstraining/clientlib/js/CustomWidget.js definiert.
  • Erweitert das Widget CQ.form.CompositeField.
  • Weist drei Felder auf: hiddenField (Textfeld), allowField (Kombinationsfeld) und otherField (Textfeld)
  • Überschreibt CQ.Ext.Component#initComponent, um die drei Felder hinzuzufügen:
    • allowField ist ein CQ.form.Selection-Objekt vom Typ „select“. „optionsProvider“ ist eine Konfiguration des Selection-Objekts, das mit der optionsProvider-Konfiguration des im Dialogfeld definierten CustomWidget instanziert wird.
    • otherField ist ein CQ.Ext.form.TextField-Objekt.
  • Überschreibt die Methoden setValue, getValue und getRawValue von CQ.form.CompositeField, um den Wert des CustomWidget mit dem Format
    <allowField-Wert>/<otherField-Wert> festzulegen und abzurufen, z. B. „Bla1/hallo“.
  • Registriert sich selbst als „ejstcustom“ xtype:
    CQ.Ext.reg('ejstcustom', Ejst.CustomWidget);.

Das auf dem Custom Multifield-Widget basierende Dialogfeld wird wie folgt angezeigt:

screen_shot_2012-02-01at115840am

Beispiel 2: Benutzerdefiniertes Treebrowse-Widget

Das auf dem Treebrowse-Widget basierende benutzerdefinierte Dialogfeld zeigt ein Fenster mit einer Registerkarte, die ein benutzerdefiniertes Pfadbrowser-Widget enthält: Wenn Sie auf den Pfeil klicken, wird ein Fenster geöffnet, in dem Sie eine Hierarchie durchsuchen und ein Element auswählen können. Der Pfad des Elements wird dann dem Pfadfeld hinzugefügt und wird beibehalten, wenn das Dialogfeld geschlossen wird.

Das benutzerdefinierte treebrowse-Dialogfeld:

  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = dialog).
  • Zeigt ein tabpanel-Widget (node type = cq:Widget, xtype = tabpanel) mit einem Bedienfeld (node type = cq:Widget, xtype = panel).
  • Das Bedienfeld weist ein benutzerdefiniertes Widget (node type = cq:Widget, xtype = ejstbrowse) auf.
  • Wird definiert durch den Knoten treebrowse unter
    /apps/extjstraining/components/customwidgets/treebrowse.
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/customwidgets/treebrowse.-1.json

Das benutzerdefinierte treebrowse-Widgets (xtype = ejstbrowse):

  • Ist ein JavaScript-Objekt namens Ejst.CustomWidget.
  • Wird in der JavaScript-Datei CustomBrowseField.js unter
    /apps/extjstraining/clientlib/js/CustomBrowseField.js
    definiert.
  • Erweitert CQ.Ext.form.TriggerField.
  • Definiert ein Fenster zum Durchsuchen namens browseWindow.
  • Überschreibt CQ.Ext.form.TriggerField#onTriggerClick, um das Fenster zum Durchsuchen anzuzeigen, wenn auf den Pfeil geklickt wird.
  • Definiert ein CQ.Ext.tree.TreePanel-Objekt:
    • Es ruft Daten ab, indem es das Servlet aufruft, das registriert ist unter /bin/wcm/siteadmin/tree.json.
    • Sein Stamm ist „apps/extjstraining“.
  • Definiert ein window-Objekt (CQ.Ext.Window):
    • Basierend auf dem vordefinierten Bedienfeld.
    • Weist eine OK-Schaltfläche auf, die den Wert des ausgewählten Pfads festlegt und das Bedienfeld ausblendet.
  • Das Fenster wird unterhalb des Feldes Pfad verankert.
  • Der ausgewählte Pfad wird bei einem show-Ereignis vom Durchsuchfeld an das Fenster weitergegeben.
  • Registriert sich selbst als „ejstbrowse“ xtype:
    CQ.Ext.reg('ejstbrowse', Ejst.CustomBrowseField);
    .

So verwenden Sie das auf Custom Treebrowse-Widget basierende Dialogfeld:

  1. Ersetzen Sie das Dialogfeld der Komponente Custom Widgets durch das Dialogfeld Custom Treebrowse:
    Führen Sie die in Beispiel 2: Dialogfeld „Single Panel“ beschriebenen Schritte aus.
  2. Bearbeiten Sie die Komponente: Das Dialogfeld wird wie im Folgenden dargestellt:
screen_shot_2012-02-01at120104pm

Beispiel 3: Rich-Text-Editor (RTE)-Plug-in

Das auf dem Rich-Text-Editor (RTE)-Plug-in basierende Dialogfeld ist ein auf dem Rich-Text-Editor basierendes Dialogfeld, das eine benutzerdefinierte Schaltfläche aufweist, mit der benutzerdefinierter Text in eckigen Klammern eingefügt wird. Der benutzerdefinierte Text kann auch anhand einer serverseitigen Logik geparst werden (in diesem Beispiel nicht implementiert), um beispielsweise Text hinzuzufügen, der am jeweiligen Pfad definiert ist:

Das auf dem RTE-Plug-in basierende Dialogfeld:

  • Wird definiert durch den rteplugin-Knoten unter
    /apps/extjstraining/components/customwidgets/treebrowse
    .
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/customwidgets/rteplugin.-1.json
  • Der Knoten rtePlugins verfügt über einen untergeordneten Knoten inserttext (node type = nt:unstructured) der nach dem Plug-in benannt ist. Er weist eine Eigenschaft mit der Bezeichnung features auf, die definiert, welche der Plug-in-Funktionen für den RTE verfügbar sind.

Das RTE-Plug-in:

  • Ist ein JavaScript-Objekt namens Ejst.InsertTextPlugin.
  • Wird in der JavaScript-Datei InsertTextPlugin.js unter
    /apps/extjstraining/clientlib/js/InsertTextPlugin.js
    definiert.
  • Erweitert das CQ.form.rte.plugins.Plugin-Objekt.
  • Die folgenden Methoden definieren das CQ.form.rte.plugins.Plugin-Objekt und werden im implementierenden Plug-in überschrieben:
    • getFeatures() gibt ein Array aller Funktionen zurück, die vom Plug-in bereitgestellt werden.
    • initializeUI() fügt die neue Schaltfläche der RTE-Symbolleiste hinzu.
    • notifyPluginConfig() zeigt Titel und Text an, wenn auf die Schaltfläche gezeigt wird.
    • execute() wird aufgerufen, wenn auf die Schaltfläche geklickt wird, und führt die Plug-in-Aktion durch: Sie zeigt ein Fenster an, in dem Text definiert wird, der eingeschlossen werden soll.
  • insertText() fügt einen Text anhand des entsprechenden Dialogfeldobjekts Ejst.InsertTextPlugin.Dialog ein (siehe unten).
  • executeInsertText() wird von der Methode apply() des Dialogfelds aufgerufen, die ausgelöst wird, wenn auf die Schaltfläche OK geklickt wird.
  • Registriert sich selbst als „inserttext“-Plug-in
    CQ.form.rte.plugins.PluginRegistry.register("inserttext", Ejst.InsertTextPlugin);.
  • Das Ejst.InsertTextPlugin.Dialog-Objekt definiert das Dialogfeld, das geöffnet wird, wenn auf die Plug-in-Schaltfläche geklickt wird. Das Dialogfeld besteht aus einem Bedienfeld, einem Formular, einem Textfeld und zwei Schaltflächen (OK und Abbrechen).

So verwenden Sie das auf dem Rich-Text-Editor (RTE)-Plug-in basierende Dialogfeld:

  1. Ersetzen Sie das Dialogfeld der Komponente Custom Widgets durch das auf dem Rich-Text-Editor (RTE)-Plug-in basierende Dialogfeld:
    Führen Sie die in Beispiel 2: Dialogfeld „Single Panel“ beschriebenen Schritte aus.
  2. Bearbeiten Sie die Komponente.
  3. Klicken Sie auf das letzte Symbol auf der rechten Seite (mit den vier Pfeilen). Geben Sie einen Pfad ein und klicken Sie auf OK:
    Der Pfad wird in eckigen Klammern ([ ]) angezeigt.
  4. Klicken Sie auf OK, um den Rich-Text-Editor zu schließen.

Das auf dem Rich-Text-Editor (RTE)-Plug-in basierende Dialogfeld wird wie folgt angezeigt:

screen_shot_2012-02-01at120254pm

Hinweis:

Dieses Beispiel zeigt nur die Implementierung des clientseitigen Teils der Logik: Die Platzhalter ([Text]) müssen dann explizit serverseitig geparst werden (z. B. in der Komponenten-JSP).

Tree Overview

Das im Lieferumfang enthaltene CQ.Ext.tree.TreePanel-Objekt bietet eine baumstrukturierte Benutzeroberflächendarstellung baumstrukturierter Daten. Die im Paket Using ExtJS Widgets enthaltene Komponente „Tree Overview“ zeigt die Verwendung des Objekts TreePanel zur Anzeige einer JCR-Baumstruktur unterhalb eines gegebenen Pfads. Das Fenster selbst kann an- bzw. abgedockt werden. In diesem Beispiel wird die Fensterlogik in die Komponenten-JSP zwischen <script></script>-Tags eingebunden.

Fügen Sie die Komponente Tree Overview wie folgt der Beispielseite hinzu:

  1. Fügen Sie die Komponente 4. Tree Overview der Beispielseite aus der Registerkarte Using ExtJS Widgets im Sidekick hinzu.
  2. Die Komponente zeigt:
    • einen Titel und etwas Text.
    • einen EIGENSCHAFTEN-Link: Klicken Sie, um die Eigenschaften des im Repository gespeicherten Absatzes anzuzeigen. Klicken Sie erneut, um die Eigenschaften zu verbergen.
    • ein frei bewegliches Fenster mit einer Baumstrukturdarstellung des Repositorys, das erweitert werden kann.

Die Komponente wird wie im Folgenden dargestellt:

screen_shot_2012-02-01at120639pm

Die Komponente „Tree Overview“:

  • Ist definiert unter:
    /apps/extjstraining/components/treeoverview.
  • Ihr Dialogfeld ermöglicht das Festlegen der Fenstergröße und das An- bzw.- Abdocken des Fensters (weitere Details unten).

Die Komponenten-JSP:

  • Ruft die Breite, Höhe und angedockten Eigenschaften aus dem Repository ab.
  • Zeigt Text zum Datenformat des Baumstrukturüberblicks an.
  • Bettet die Fensterlogik zwischen JavaScript-Tags in die Komponenten-JSP ein.
  • Ist definiert unter:
    apps/extjstraining/components/treeoverview/content.jsp.

Der in die Komponenten-JSP eingebettete JavaScript-Code:

  • Definiert ein tree-Objekt, indem versucht wird, ein Baumstrukturfenster von der Seite abzurufen.
  • Wenn das Fenster, das die Baumstruktur anzeigt, nicht vorhanden ist, wird treePanel (CQ.Ext.tree.TreePanel) erstellt:
    • treePanel enthält die Daten, anhand derer das Fenster erstellt wird.
    • Die Daten werden abgerufen, indem das Servlet aufgerufen wird, das unter
      /bin/wcm/siteadmin/tree.json registriert ist.
  • Der beforeload-Listener stellt sicher, dass der gewählte Knoten geladen wird.
  • Das root-Objekt legt den Pfad apps/extjstraining als Stamm der Baumstruktur fest.
  • tree (CQ.Ext.Window) wird anhand des vordefinierten treePanel festgelegt und wird angezeigt mit
    tree.show();
  • Wenn das Fenster bereits vorhanden ist, wird es anhand der aus dem Repository abgerufenen Breite, Höhe und angedockten Eigenschaften angezeigt.

Das Komponentendialogfeld:

  • Zeigt eine Registerkarte mit zwei Feldern zum Festlegen der Größe (Breite und Höhe) des Fensters des Baumstrukturüberblicks und ein Feld zum An-/Abdocken des Fensters.
  • Wird von einem Knoten definiert (node type = cq:Dialog, xtype = panel).
  • Das Bedienfeld weist ein sizefield-Widget (node type = cq:Widget, xtype = sizefield) und ein selection-Widget (node type = cq:Widget, xtype = selection, type = radio) mit zwei Optionen (true/false) auf.
  • Wird definiert durch den dialog-Knoten unter
    /apps/extjstraining/components/treeoverview/dialog.
  • Wird im JSON-Format gerendert, indem Folgendes angefordert wird:
    http://localhost:4502/apps/extjstraining/components/treeoverview/dialog.-1.json
  • Wird wie folgt angezeigt:
screen_shot_2012-02-01at120745pm

Grid Overview

Ein „Grid Panel“ stellt Daten in tabellarischer Form als Zeilen und Spalten dar. Es setzt sich aus Folgendem zusammen:

  • Store: das Modell, das die Datendatensätze enthält (Zeilen)
  • Spaltenmodell: das Spaltendesign
  • Ansicht: fasst die Benutzeroberfläche zusammen
  • Auswahlmodell: das Auswahlverhalten

Die im Paket Using ExtJS Widgets enthaltene Komponente „Grid Overview“ zeigt, wie Daten in einem tabellarischen Format angezeigt werden:

  • Das Beispiel 1 verwendet statische Daten.
  • Das Beispiel 2 verwendet aus dem Repository abgerufene Daten.

Fügen Sie die Komponente „Grid Overview“ wie folgt der Beispielseite hinzu:

  1. Fügen Sie die Komponente 5. Grid Overview der Beispielseite aus der Registerkarte Using ExtJS Widgets im Sidekick hinzu.
  2. Die Komponente zeigt:
    •  einen Titel und etwas Text.
    • einen EIGENSCHAFTEN-Link: Klicken Sie, um die Eigenschaften des im Repository gespeicherten Absatzes anzuzeigen. Klicken Sie erneut, um die Eigenschaften zu verbergen.
    • ein frei bewegbares Fenster, das Daten im Tabellenformat enthält.

Die Komponente wird wie im Folgenden dargestellt:

screen_shot_2012-02-01at121109pm

Beispiel 1: Standardraster

In der von Adobe ausgelieferten Version zeigt die Komponente Grid Overview ein Fenster mit statischen Daten in tabellarischer Form. In diesem Beispiel wird die Logik auf zwei Arten in die Komponenten-JSP eingebunden:

  • Die generische Logik wird zwischen <script></script>-Tags definiert.
  • Die spezifische Logik steht in einer separaten JS-Datei zur Verfügung und ist in der JSP verlinkt. Diese Einrichtung ermöglicht es, einfach zwischen den beiden Logiken (statisch/dynamisch) umzuschalten, indem die gewünschten <script>-Tags kommentiert werden.

Die Komponente „Grid Overview“:

  • Ist definiert unter:
    /apps/extjstraining/components/gridoverview.
  • Ihr Dialogfeld ermöglicht das Festlegen der Fenstergröße und das An- bzw.- Abdocken des Fensters.

Die Komponenten-JSP:

  • Ruft die Breite, Höhe und angedockten Eigenschaften aus dem Repository ab.
  • Zeigt Text als Einführung zum Datenformat des Rasterüberblicks an.
  • Verweist auf JavaScript-Code, der das GridPanel-Objekt definiert:
    <script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script>
    defaultgrid.js definiert einige statische Daten als Grundlage für das GridPanel-Objekt.
  • Bettet zwischen JavaScript-Tags JavaScript-Code ein, der das Window-Objekt definiert, das das GridPanel-Objekt verbraucht.
  • Ist definiert unter:
    apps/extjstraining/components/gridoverview/content.jsp.

Der in die Komponenten-JSP eingebettete JavaScript-Code:

  • Definiert das grid-Objekt, indem versucht wird, die Fensterkomponente von folgender Seite abzurufen:
    var grid = CQ.Ext.getCmp("<%= node.getName() %>-grid");
  • ist grid nicht vorhanden, wird ein CQ.Ext.grid.GridPanel-Objekt (gridPanel) definiert, indem die Methode getGridPanel() abgerufen wird (siehe unten). Diese Methode wird in defaultgrid.js definiert.
  • grid ist ein CQ.Ext.Window-Objekt, das auf dem vordefinierten GridPanel basiert, und wird angezeigt: grid.show();
  • Ist grid bereits vorhanden, wird es anhand der aus dem Repository abgerufenen Breite, Höhe und angedockten Eigenschaften angezeigt.

 

Die JavaScript-Datei (defaultgrid.js), auf die in der Komponenten-JSP verwiesen wird, definiert die getGridPanel()-Methode, die von dem Skript aufgerufen wird, das in der JSP eingebettet ist, und gibt ein CQ.Ext.grid.GridPanel-Objekt zurück, das auf statischen Daten basiert. Die Logik lautet wie folgt:

  • myData ist ein Array statischer Daten, formatiert als Tabelle mit fünf Spalten und vier Zeilen.
  • store ist ein CQ.Ext.data.Store-Objekt, das myData verbraucht.
  • store wird in den Speicher
    store.load(); geladen.
  • gridPanel ist ein CQ.Ext.grid.GridPanel, das store verbraucht:
    •  Die Spaltenbreiten werden ständig neu proportioniert:
      forceFit: true
    • Nur eine Zeile kann jeweils ausgewählt werden:
      singleSelect:true

 

Beispiel 2: Verweissuchraster

Bei der Installation des Pakets zeigt die Datei content.jsp der Komponente Grid Overview ein Raster an, das auf statischen Daten basiert. Es ist möglich, die Komponente so zu ändern, dass ein Raster mit den folgenden Eigenschaften angezeigt wird:

  • Hat drei Spalten.
  • Basiert auf Daten, die aus dem Repository abgerufen werden, indem ein Servlet aufgerufen wird.
  • Die Zellen der letzten Spalte können bearbeitet werden. Der Wert wird in einer test-Eigenschaft unterhalb des Knotens gespeichert, der anhand des in der ersten Spalte angezeigten Pfades definiert wird.

Wie bereits weiter oben beschrieben ruft das Fensterobjekt sein CQ.Ext.grid.GridPanel-Objekt ab, indem die unter /apps/extjstraining/components/gridoverview/defaultgrid.js in der Datei defaultgrid.js definierte Methode getGridPanel() aufgerufen wird. Die Komponente Grid Overview bietet eine andere Implementierung für die Methode getGridPanel(), die unter /apps/extjstraining/components/gridoverview/referencesearch.js in der Datei referencesearch.js definiert ist. Durch Wechseln der JS-Datei, auf die in der Komponenten-JSP verwiesen wird, basiert das Raster auf aus dem Repository abgerufenen Daten.

Wechseln Sie die JS-Datei, auf die in der Komponenten-JSP verwiesen wird:

  1. Kommentieren Sie in CRXDE Lite in der Datei content.jsp der Komponente die Zeile, die die Datei defaultgrid.js enthält, sodass sie wie folgt aussieht:
    <!-- script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script-->
  2. Entfernen Sie den Kommentar aus der Zeile, die die Datei referencesearch.js enthält, sodass sie wie folgt aussieht:
    <script type="text/javascript" src="/apps/extjstraining/components/gridoverview/referencesearch.js"></script>
  3. Speichern Sie die Änderungen.
  4. Aktualisieren Sie die Beispielseite.

Die Komponente wird wie im Folgenden dargestellt:

screen_shot_2012-02-01at121429pm

Der JavaScript-Code, auf den in der Komponenten-JSP (referencesearch.js) verwiesen wird, definiert die Methode getGridPanel(), die von der Komponenten-JSP aufgerufen werden, und gibt ein CQ.Ext.grid.GridPanel-Objekt zurück, das auf Daten basiert, die dynamisch aus dem Repository abgerufen werden. Die Logik in referencesearch.js definiert dynamische Daten als Basis für das GridPanel:

  • reader ist ein CQ.Ext.data.JsonReader -Objekt, das die Servlet-Antwort im JSON-Format für drei Spalten liest.
  • cm ist ein CQ.Ext.grid.ColumnModel-Objekt für drei Spalten.
    Die „Test“-Spaltenzellen können bearbeitet werden, da sie mit einem Editor definiert werden:
    editor: new CQ.Ext.form.TextField({})
  • die Spalten sind sortierbar:
    cm.defaultSortable = true;
  • store ist ein CQ.Ext.data.GroupingStore-Objekt:
    • Es ruft seine Daten ab, indem es das unter „/bin/querybuilder.json“ registrierte Servlet mit einigen Parametern zum Filtern der Abfrage aufruft.
    • Es basiert auf dem vorher definierten reader.
    • Die Tabelle wird anhand der Spalte „jcr:path“ in aufsteigender Reihenfolge definiert.
  • gridPanel ist ein CQ.Ext.grid.EditorGridPanel-Objekt, das bearbeitet werden kann:
    • Es basiert auf dem vordefinierten store und auf dem Spaltenmodell cm.
    • Nur eine Zeile kann jeweils ausgewählt werden:
      sm: new CQ.Ext.grid.RowSelectionModel({singleSelect:true})
    • Der afteredit-Listener stellt sicher, dass nach der Bearbeitung einer Zelle in der „Test“-Spalte Folgendes passiert:
      • Die Eigenschaft „test“ des Knotens wird am von der Spalte „jcr:path“ definierten Pfad im Repository mit dem Wert der Zelle festgelegt.
      • Wenn der POST erfolgreich ist, wird der Wert dem store-Objekt hinzugefügt, andernfalls wird er abgelehnt.

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie