Auswahlereignisse in einer Oracle JET-Webanwendung verarbeiten
Einführung
Mit der Oracle JavaScript Extension Toolkit-(Oracle JET-)API in der viewModel der Oracle JET-Web-App können Sie Event Handler erstellen, die auf den selected
-Attributänderungs-Listener der Oracle JET List View-Komponente reagieren. Wenn der Benutzer ein Element in der Liste auswählt oder abwählt, löst der Change Listener den Event Handler aus. Mit dem Event Handler können Sie den Oracle JET-Datenprovider auffüllen, und Sie können den Datenprovider an Beobachtungen binden, die von der View-Komponente verwendet werden können. Der Event Handler kann auch die boolesche Variable festlegen, die von der Oracle JET If Binding-Komponente verwendet wird, um ihre verschachtelten HTML-Elemente in der View bedingt darzustellen. Wenn das Attribut selected
der Komponente "Oracle JET-Listenansicht" für die Masterliste nicht leer ist, wird die Variable auf true
gesetzt, und die View gibt die datengebundene Detailliste wieder. Wenn das Attribut selected
aufgrund eines Auswahlereignisses leer ist, wird die Variable auf "false" gesetzt, und die Ansicht gibt einen Container in der Ansicht ohne die datengebundene Detailliste wieder.
Ziele
In diesem Tutorial aktualisieren Sie die Benutzeroberfläche einer Oracle JET-Webanwendung, sodass Sie Masterdetaildaten anzeigen können. Sie lernen, wie Sie einen JavaScript-Event Handler mit einem Oracle JET-Eigenschaftsänderungs-Listener erstellen. Außerdem erfahren Sie, wie Sie eine Oracle JET If Binding-Komponente verwenden, um die Detailliste bedingt zur Verarbeitung der Listenauswahl anzuzeigen.
Voraussetzungen
- Eine Entwicklungsumgebung, die zum Erstellen von Oracle JET-Anwendungen mit der JavaScript-Laufzeit, Node.js und der neuesten Befehlszeilenschnittstelle des Oracle JET-Release eingerichtet wurde
- Abschluss der vorherigen Tutorials in diesem Lernpfad, sodass Sie die Oracle JET-Webanwendung im Ordner
JET_Web_Application
erstellt haben - Die abgeschlossene App jet_web_application_masterdetail_final.zip wurde optional heruntergeladen
Aufgabe 1: Auswahlverhalten in der Ansicht festlegen
Aktualisieren Sie die Ansicht, um die Komponenten der Listenansicht so anzupassen, dass eine Zeilenauswahl in der Liste "Aktivitäten" und der Liste "Aktivitätselemente" verarbeitet wird. Die Oracle JET-Listenansichtskomponente definiert das Attribut first-selected-item
, das die Komponente mit den Datenelementen der Zeilenauswahl des Benutzers füllt und das Sie mit einem wechselseitigen Binding in eine beobachtbare Komponente lesen können. Mit dem Attribut on-selection-changed
der Komponente können Sie Listenauswahl-/Auswahlereignisse abfangen und verarbeiten, indem Sie einen Ereignis-Listener binden, den Sie in viewModel definieren.
-
Navigieren Sie zum Verzeichnis
JET_Web_Application/src/ts/views
, und öffnen Sie die Dateidashboard.html
in einem Editor. -
Suchen Sie unter der Überschrift "Aktivitäten" das benutzerdefinierte HTML-Element
oj-list-view
, in demid="activitiesList"
enthalten ist, und fügen Sie dann die Auswahlverhaltensattribute nach dem Attributgridlines.item
hinzu.<h3 id="activitiesHeader">Activities</h3> <oj-list-view id="activitiesList" class="item-display" aria-labelledby="activitiesHeader" data="[[activityDataProvider]]" gridlines.item="visible" selection-mode="single" selected="{{selectedActivity}}" on-first-selected-item-changed="[[selectedActivityChanged]]" first-selected-item="{{firstSelectedActivity}}" scroll-policy="loadMoreOnScroll" scroll-policy-options.fetch-size="5"> <template slot="itemTemplate"> . . .
-
Suchen Sie unter der Überschrift "Aktivitätselemente" das benutzerdefinierte HTML-Element
oj-list-view
, in demid="itemsList"
vorhanden ist, und fügen Sie dann die Auswahlverhaltensattribute nach dem Attributgridlines.item
hinzu.<h3 id="itemsListHeader">Activity Items</h3> <oj-list-view id="itemsList" class="item-display" data="[[itemsDataProvider]]" aria-labelledby="itemsListHeader" gridlines.item="visible" selection-mode="single" selected="{{selectedItem}}" on-first-selected-item-changed="[[selectedItemChanged]]" first-selected-item="{{firstSelectedItem}}" scroll-policy="loadMoreOnScroll" scroll-policy-options.fetch-size="5"> <template slot="itemTemplate"> . . .
-
Speichern Sie die Datei
dashboard.html
.Die Datei sollte in etwa event-task1-dashboard-html.txt aussehen.
Aufgabe 2: Event Handler in ViewModel erstellen
Aktualisieren Sie viewModel, um Ereignis-Handler für die Komponenten der Listenansicht hinzuzufügen, um auf die Auswahl in der Aktivitätsliste und der Aktivitätselementliste zu reagieren. Die Oracle JET List View-Komponente definiert ein selected
-Attribut, für das die Oracle JET List View-API einen Eigenschaftsänderungs-Listener definiert. Der Event Handler legt die Beobachtungen selectedActivity
und selectedItem
fest, wenn der Benutzer eine Listenauswahl vornimmt und sich der Wert des Attributs selected
ändert.
-
Navigieren Sie zum Verzeichnis
JET_Web_Application/src/ts/viewModels
, und öffnen Sie die Dateidashboard.ts
in einem Editor. -
Fügen Sie unter der beobachtbaren Definition
pieSeriesValue
vor derconstructor()
Beobachtungsdateien für die Auswahl der Aktivitätsliste und die Auswahl der Aktivitätselementeliste hinzu.class DashboardViewModel { . . . pieSeriesValue: ko.ObservableArray; // Observables for Activities selectedActivity = new ObservableKeySet(); activitySelected = ko.observable(false); // Controls display of Activity Items firstSelectedActivity = ko.observable(); selectedActivityIds = ko.observable(); // Observables for Activity Items itemSelected = ko.observable(false); selectedItem = ko.observable(); firstSelectedItem = ko.observable(); constructor() { . . .
-
Importieren Sie oben in der Datei
dashboard.ts
die KlasseObservableKeySet
aus dem Modulojs/ojknockout-keyset
und die KlasseojListView
aus dem Modulojs/ojlistview
.import * as ko from "knockout"; . . . import "ojs/ojavatar"; import { ObservableKeySet } from "ojs/ojknockout-keyset"; import { ojListView } from "ojs/ojlistview";
-
Fügen Sie vor der Klasse
DashboardViewModel
den Aliasnamen des TypsActivityItems
hinzu.. . . type ActivityItems = { id: number; name: string; items: Array<Item>; short_desc: string; image: string; }; class DashboardViewModel { . . .
-
Fügen Sie nach der Deklaration der Methode
constructor()
der KlasseDashboardViewModel
den Event HandlerselectedActivityChanged
mit Testbedingungen hinzu, um die Auswahl- und Auswahlereignisse zu verarbeiten.} // End of constructor function selectedActivityChanged = (event: ojListView.firstSelectedItemChanged<ActivityItems["id"], ActivityItems>) => { /** * If no items are selected then the firstSelectedItem property returns an object * with both key and data properties set to null. */ let itemContext = event.detail.value.data; if (itemContext != null) { // If selection, populate and display list } else { // If deselection, hide list } };
Implementieren Sie diesen Event Handler in den nächsten Schritten.
-
Füllen Sie in der
if
-Anweisung desselectedActivityChanged
-Ereignis-Handlers die beobachtbare DateiitemsDataProvider
mit der VariablenitemsArray
auf, und legen Sie dann die Beobachtungen für den AuswahlstatusactivitySelected
unditemSelected
für das Auswahlereignis auftrue
fest.selectedActivityChanged = (event: ojListView.firstSelectedItemChanged<ActivityItems["id"], ActivityItems>) => { /** * If no items are selected, then this property firstSelectedItem * will return an object with both key and data properties set to null. */ let itemContext = event.detail.value.data; if (itemContext != null) { // If selection, populate and display list // Hide currently-selected activity item this.activitySelected(false); let itemsArray = itemContext.items; this.itemsDataProvider.data = itemsArray; // Set List View properties this.activitySelected(true); this.itemSelected(false); this.selectedItem(); this.itemData(); } else { // If deselection, hide list } };
-
Setzen Sie in der
else
-Anweisung desselectedActivityChanged
-Ereignis-Handlers die AuswahlstatusartenactivitySelected
unditemSelected
für das Auswahlereignis auffalse
.selectedActivityChanged = (event: ojListView.firstSelectedItemChanged<ActivityItems["id"], ActivityItems>) => { /** * If no items are selected then this property firstSelectedItem will return an * object with both key and data properties set to null. */ let itemContext = event.detail.value.data; if (itemContext != null) { . . . } else { // If deselection, hide list this.activitySelected(false); this.itemSelected(false); } };
-
Fügen Sie nach dem Ereignis-Handler
selectedActivityChanged
einenselectedItemChanged
-Ereignis-Handler mit Testbedingungen hinzu, um die Auswahl- und Auswahlereignisse zu verarbeiten.selectedActivityChanged = (event: ojListView.firstSelectedItemChanged<ActivityItems["id"], ActivityItems>) => { . . . }; /** * Handle selection from Activity Items list */ selectedItemChanged = (event: ojListView.firstSelectedItemChanged<Item["id"], Item>) => { let isClicked = event.detail.value.data; if (isClicked != null) { // If selection, populate and display list } else { // If deselection, hide list } };
Implementieren Sie diesen Event Handler in den nächsten Schritten.
-
Füllen Sie in der
if
-Anweisung desselectedItemChanged
-Ereignis-Handlers die beobachtbareitemData
-Datei auf, füllen Sie die beobachtbarepieSeriesValue
mit der ArrayvariablenpieSeries
aus, und legen Sie dann denitemSelected
-Auswahlstatus fest, der für das Auswahlereignis auftrue
beobachtet werden kann.selectedItemChanged = (event: ojListView.firstSelectedItemChanged<Item["id"], Item>) => { let isClicked = event.detail.value.data; if (isClicked != null) { // If selection, populate and display list this.itemData(event.detail.value.data); // Create variable and get attributes of the items list to set pie chart values let pieSeries = [ { name: "Quantity in Stock", items: [this.itemData().quantity_instock] }, { name: "Quantity Shipped", items: [this.itemData().quantity_shipped] } ]; // Update the pie chart with the data this.pieSeriesValue(pieSeries); this.itemSelected(true); } else { // If deselection, hide list } };
-
Setzen Sie in der
else
-Anweisung desselectedItemChanged
-Ereignis-Handlers den AuswahlstatusitemSelected
auffalse
für das Auswahlereignis.selectedItemChanged = (event: ojListView.firstSelectedItemChanged<Item["id"], Item>) => { if (isClicked != null) { . . . } else { // If deselection, hide list this.itemSelected(false); } };
-
Speichern Sie die Datei
dashboard.ts
.Die Datei sollte in etwa final-event-dashboard-ts.txt aussehen.
Aufgabe 3: Listen-Rendering in der Ansicht bedingten
Aktualisieren Sie die View mit Oracle JET If Binding-Komponenten, um die Detailliste bedingt wiederzugeben. Die Oracle JET If Binding-Komponente nimmt eine boolesche Variable für das Attribut test
an. Verschachteln Sie innerhalb einer If-Binding-Komponente den Container "Aktivitätselemente", und verschachteln Sie in einer anderen If-Binding-Komponente den Container "Artikeldetails". Verwenden Sie dann die If Binding-Komponenten, um den Status der Beobachtungen activitySelected
und itemSelected
zu testen. Der verschachtelte Inhalt der If Binding-Komponente wird wiedergegeben, wenn die Testbedingung true
ist. Zeigen Sie die datengebundene Liste an, wenn der beobachtbare Wert true
ist, wie vom Listenereignis-Handler festgelegt. Verwenden Sie eine andere If Binding-Komponente, um zu testen, ob die beobachtbare Komponente false
ist, und zeigen Sie dann einen Container mit einer Nachricht an, die den Benutzer anweist, eine Listenauswahl vorzunehmen.
-
Navigieren Sie zum Verzeichnis
JET_Web_Application/src/ts/views
, und öffnen Sie die Dateidashboard.html
in einem Editor. -
Suchen Sie das Element
div
mitid="parentContainer2"
. Fügen Sie darüber das Eröffnungs-Tag des benutzerdefinierten HTML-Elementsoj-bind-if
hinzu, wobei das Attributtest
auf den StatusactivitySelected
gesetzt werden kann.. . . </oj-list-view> </div> <oj-bind-if test="[[activitySelected()]]"> <div id="parentContainer2" class="oj-flex oj-flex-item oj-panel oj-bg-danger-30 oj-lg-padding-6x oj-md-8 oj-sm-12"> <div id="activityItemsContainer" class="oj-flex-item oj-md-6 oj-sm-12"> <h3 id="itemsListHeader">Activity Items</h3> . . .
Wenn der Benutzer eine Aktivität aus der Liste "Aktivitäten" auswählt, setzt der Ereignis-Handler viewModel Activity Changed den Wert von
activitySelected
auftrue
. In diesem Fall wird die Testbedingungoj-bind-if
erfüllt, und die App stellt den Aktivitätselementcontainer für die Aktivitätsauswahl wieder her. Die Notation()
auf der beobachtbaren Eigenschaft ist die Knockout-Funktionskonvention, um den Wert des beobachtbaren Objekts zu erhalten, anstatt die Instanz des beobachtbaren Objekts abzurufen. -
Suchen Sie das Element
div
, in demid="itemDetailsContainer"
und darüber das Eröffnungs-Tag des benutzerdefinierten HTML-Elementsoj-bind-if
mit dem Attributtest
, das auf den StatusitemSelected
gesetzt ist.. . . </oj-list-view> </div> <oj-bind-if test="[[itemSelected()]]"> <div id="itemDetailsContainer" class="oj-flex-item oj-panel oj-bg-neutral-30 oj-md-6 oj-sm-12"> <h3>Item Details</h3> . . .
Wenn der Benutzer ein Element aus der Liste "Aktivitätselemente" auswählt, setzt der Ereignis-Handler viewModel "Element geändert"
itemSelected
auftrue
. In diesem Fall wird die Testbedingungoj-bind-if
erfüllt, und die App stellt den Container "Artikeldetails" für die Aktivitätselementauswahl wieder her. -
Zählen Sie unten in der Datei
dashboard.html
zwei schließende</div>
-Tags, und fügen Sie dann das schließende</oj-bind-if>
-Tag hinzu, das mit dem öffnenden<oj-bind-if test ="[[activitySelected()]]">
-Tag übereinstimmt. Zählen Sie ein weiteres schließendes</div>
-Tag, und fügen Sie dann das schließende</oj-bind-if>
-Tag für das öffnende<oj-bind-if test ="[[itemSelected()]]">
-Tag hinzu.. . . </oj-chart> </div> </div> </oj-bind-if> </div> </oj-bind-if> </div> </div>
-
Fügen Sie unter dem von Ihnen hinzugefügten schließenden
</oj-bind-if>
-Tag am Ende der Datei ein benutzerdefiniertesoj-bind-if test="[[!activitySelected()]]"
-HTML-Element ein, das eindiv
-Element mit Oracle JEToj-flex-item oj-sm-6
-Flexlayout-Helper-Klassen enthält.. . . </oj-bind-if> </div> </oj-bind-if> <oj-bind-if test="[[!activitySelected()]]"> <div class="oj-flex-item oj-sm-6"> <p>Select an Activity to see Items</p> </div> </oj-bind-if> </div> </div>
Die Oracle JET
oj-sm-6
-Helper-Klasse gibt an, dass der Container für die ÜberschriftSelect an Activity to see Items
sechs Containerspalten für kleine und größere Bildschirmgrößen einnimmt.Bis der Benutzer eine Aktivität auswählt, ist der Wert von
activitySelected
sichtbarfalse
. Wenn der Benutzer die Strg-Taste gedrückt und auf eine bereits ausgewählte Aktivität klickt, behandelt viewModel dieses Ereignis als Auswahl, und der Activity Changed Event Handler setztactivitySelected
auffalse
. In beiden Fällen wird die Testbedingungoj-bind-if
durch die boolesche Bedingungfalse
erfüllt, und die App gibt die ÜberschriftSelect an Activity to see Items
wieder. -
Fügen Sie unter dem ersten schließenden
</oj-bind-if>
-Tag in der Datei ein benutzerdefiniertesoj-bind-if test ="[[!itemSelected()]]"
-HTML-Element hinzu, das eindiv
-Element mit Oracle JEToj-flex-item oj-sm-12 oj-md-6 flex
-Layout-Helper-Klassen enthält.. . . </oj-chart> </div> </div> </oj-bind-if> <oj-bind-if test="[[!itemSelected()]]"> <div class="oj-flex-item oj-sm-12 oj-md-6"> <p>Select an Item to see details</p> </div> </oj-bind-if> </div> </oj-bind-if> <oj-bind-if test="[[!activitySelected()]]"> <div class="oj-flex-item oj-sm-6"> <p>Select an Activity to see Items</p> </div> </oj-bind-if> </div> </div>
Die Oracle JET
oj-sm-12
- undoj-md-6
-Helper-Klassen geben an, dass der Container für dieSelect an Item
-Datei zur Anzeige der Detailüberschrift sechs Containerspalten für mittlere und größere Bildschirmgrößen oder zwölf Containerspalten für kleine Bildschirmgrößen einnimmt.Bis der Benutzer ein Aktivitätselement auswählt, ist der Wert der beobachtbaren Datei
itemSelected
false
. Wenn der Benutzer die Strg-Taste gedrückt und auf ein bereits ausgewähltes Aktivitätselement klickt, behandelt viewModel dieses Ereignis als Auswahl, und der Item Changed Event Handler setztitemSelected
auffalse
. In beiden Fällen wird die Testbedingungoj-bind-if
durch die boolesche Bedingungfalse
erfüllt, und die App gibt die ÜberschriftSelect an Item to see details
wieder. -
Speichern Sie die Datei
dashboard.html
.Die Datei sollte in etwa final-event-dashboard-html.txt aussehen.
Aufgabe 4: Master- und Detaillisten testen
-
Wechseln Sie im Terminalfenster in das Verzeichnis
JET_Web_Application
, und führen Sie die App aus.$ ojet serve
-
Klicken Sie im Webbrowser auf die Baseball-Aktivität in Ihrer App.
Die Listenauswahl Aktivitäten löst den Ereignis-Handler
selectedActivityChanged
aus. Der Container Aktivitätselemente wird für die ausgewählte Aktivität wiedergegeben. -
Klicken Sie in der Liste Aktivitätselemente auf SureCatch Baseball Glove.
Die Listenauswahl Aktivitätselemente löst den Ereignis-Handler
selectedItemChanged
aus. Die App gibt den Container Artikeldetails für den ausgewählten Artikel wieder. -
Drücken Sie in der Liste Aktivitätselemente die Strg-Taste, und klicken Sie auf SureCatch Baseballhandschuh, um die Auswahl aufzuheben.
Die Auswahl der Liste Aktivitätselemente löst den Ereignis-Handler
selectedItemChanged
aus. Der Container Artikeldetails ist ausgeblendet. -
Ändern Sie die Größe des Browsers, oder drücken Sie Ctrl+Shift+I, um Chrome DevTools aufzurufen, und wählen Sie eine kleinere Bildschirmgröße aus, wie z.B. Pixel 5, aus dem Bildschirmgrößenemulator.
Die Behälter sind je nach Bildschirmgröße angeordnet.
-
Schließen Sie das Browserfenster oder die Registerkarte, auf der Ihre aktive Webanwendung angezeigt wird.
-
Drücken Sie im Terminalfenster auf Ctrl+C, und geben Sie bei entsprechender Aufforderung
y
ein, um den Oracle JET-Tooling-Batchjob zu beenden.
Aufgabe 5: (Optional) Webanwendung aus einer wiederhergestellten App ausführen
Wenn Sie die abgeschlossene Oracle JET-Webanwendung aus dem angegebenen Code ausführen möchten, können Sie die App aus der heruntergeladenen Archivdatei wiederherstellen. Um mit einer Oracle JET-App zu arbeiten, müssen Sie Projektabhängigkeiten, einschließlich Oracle JET-Tooling und der erforderlichen Librarys und Module, innerhalb der extrahierten App wiederherstellen.
-
Laden Sie die Datei
jet_web_application_masterdetail_final.zip
herunter, und extrahieren Sie den Inhalt der abgeschlossenen App in den Ordnerjet_web_application_masterdetail_final
. -
Navigieren Sie im Terminalfenster zum Ordner
jet_web_application_masterdetail_final
, und stellen Sie die Oracle JET-Webanwendung wieder her.$ ojet restore
-
Warten Sie auf eine Bestätigung.
. . . Success: Restore complete
Die App kann jetzt ausgeführt werden.
-
Führen Sie die Webanwendung aus, und testen Sie sie im Browser.
$ ojet serve
-
Schließen Sie das Browserfenster oder die Registerkarte, auf der Ihre aktive Webanwendung angezeigt wird.
-
Drücken Sie im Terminalfenster auf Ctrl+C, und geben Sie bei entsprechender Aufforderung
y
ein, um den Oracle JET-Tooling-Batchjob zu beenden.
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere Inhalte für kostenloses Lernen im Oracle Learning YouTube-Kanal zu. Außerdem besuchen Sie education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Handle selection events in an Oracle JET web app
F53159-01
February 2022
Copyright © 2022, Oracle and/or its affiliates.