Gestisce gli eventi di selezione in un'applicazione Web Oracle JET
Introduzione
È possibile utilizzare l'API Oracle JavaScript Extension Toolkit (Oracle JET) in viewModel dell'applicazione Web Oracle JET per creare handler di eventi che rispondono al listener di modifica degli attributi del componente selected
Oracle JET List View. Quando l'utente seleziona o deseleziona un elemento nella lista, il listener delle modifiche attiva il gestore di eventi. È possibile utilizzare l'handler di eventi per popolare il provider di dati Oracle JET ed è possibile associare il provider di dati agli osservatori che il componente vista può utilizzare. L'handler di eventi può anche impostare la variabile booleana utilizzata dal componente Oracle JET If Binding per eseguire il rendering condizionale dei relativi elementi HTML nidificati nella vista. Se l'attributo selected
del componente Oracle JET List View per la lista principale non è vuoto, la variabile viene impostata su true
e la vista esegue il rendering della lista dei dettagli associati ai dati. Se l'attributo selected
è vuoto a causa di un evento di deselezione, la variabile viene impostata su false e la vista visualizza un contenitore nella vista senza l'elenco dei dettagli associati ai dati.
Obiettivi
In questa esercitazione verrà aggiornata l'interfaccia utente di un'applicazione Web Oracle JET in modo da poter visualizzare i dati Master-Detail. Verrà descritto come creare un handler di eventi JavaScript utilizzando un listener di modifica delle proprietà Oracle JET. Viene inoltre descritto come utilizzare un componente Oracle JET If Binding per visualizzare in modo condizionale la lista dei dettagli per gestire le selezioni di elenchi.
Prerequisiti
- Un ambiente di sviluppo impostato per creare applicazioni Oracle JET con runtime JavaScript, Node.js e l'interfaccia della riga di comando della release Oracle JET più recente
- Completamento delle esercitazioni precedenti in questo percorso di apprendimento, in modo da creare l'applicazione Web Oracle JET nella cartella
JET_Web_Application
- Facoltativamente, l'applicazione jet_web_application_masterdetail_final.zip completata è stata scaricata
Task 1: Imposta comportamento selezione nella vista
Aggiornare la vista per personalizzare i componenti della vista elenco per gestire una selezione di righe nell'elenco Attività e Elementi attività. Il componente Vista lista Oracle JET definisce l'attributo first-selected-item
popolato dal componente con gli elementi dati della selezione di righe dell'utente e che è possibile leggere in un osservabile mediante l'associazione bidirezionale. Utilizzare l'attributo on-selection-changed
del componente per rilevare ed elaborare gli eventi di selezione/deselezione della lista mediante l'associazione di un listener di eventi definito in viewModel.
-
Passare alla directory
JET_Web_Application/src/ts/views
e aprire il filedashboard.html
in un editor. -
Sotto l'intestazione Attività, individuare l'elemento HTML personalizzato
oj-list-view
doveid="activitiesList"
, quindi aggiungere gli attributi di funzionamento selezione dopo l'attributogridlines.item
.<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"> . . .
-
Sotto l'intestazione Elementi attività, individuare l'elemento HTML personalizzato
oj-list-view
doveid="itemsList"
, quindi aggiungere gli attributi di funzionamento selezione dopo l'attributogridlines.item
.<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"> . . .
-
Salvare il file
dashboard.html
.L'aspetto del file dovrebbe essere simile a event-task1-dashboard-html.txt.
Task 2: Creare handler di eventi in ViewModel
Aggiornare il file viewModel per aggiungere gli handler di eventi per i componenti della vista elenco per rispondere alle selezioni nell'elenco Attività e nell'elenco Elementi attività. Il componente Vista lista Oracle JET definisce un attributo selected
in cui l'API vista lista Oracle JET definisce un listener delle modifiche delle proprietà. L'handler di eventi imposta gli osservabili selectedActivity
e selectedItem
quando l'utente effettua una selezione di elenchi e il valore dell'attributo selected
viene modificato.
-
Passare alla directory
JET_Web_Application/src/ts/viewModels
e aprire il filedashboard.ts
in un editor. -
Sotto la definizione osservabile
pieSeriesValue
, prima diconstructor()
aggiungere gli osservabili per la selezione dell'elenco attività e la selezione dell'elenco degli elementi attività.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() { . . .
-
Nella parte superiore del file
dashboard.ts
importare la classeObservableKeySet
dal moduloojs/ojknockout-keyset
e dalla classeojListView
dal moduloojs/ojlistview
.import * as ko from "knockout"; . . . import "ojs/ojavatar"; import { ObservableKeySet } from "ojs/ojknockout-keyset"; import { ojListView } from "ojs/ojlistview";
-
Prima della classe
DashboardViewModel
, aggiungere l'alias di tipoActivityItems
.. . . type ActivityItems = { id: number; name: string; items: Array<Item>; short_desc: string; image: string; }; class DashboardViewModel { . . .
-
Dopo la dichiarazione del metodo
constructor()
della classeDashboardViewModel
, aggiungere l'handler di eventiselectedActivityChanged
con le condizioni di test per gestire gli eventi di selezione e deselezione.} // 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 } };
Implementare questo handler di eventi nei passi successivi.
-
Nell'istruzione
if
dell'handler di eventiselectedActivityChanged
, popolare l'osservabileitemsDataProvider
utilizzando la variabileitemsArray
, quindi impostare gli osservabili di stato di selezioneactivitySelected
eitemSelected
sutrue
per l'evento di selezione.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 } };
-
Nell'istruzione
else
del gestore eventiselectedActivityChanged
, impostare gli osservabili dello stato di selezioneactivitySelected
eitemSelected
sufalse
per l'evento di deselezione.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); } };
-
Dopo l'handler di eventi
selectedActivityChanged
, aggiungere un handler di eventiselectedItemChanged
con le condizioni di test per gestire gli eventi di selezione e deselezione.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 } };
Implementare questo handler di eventi nei passi successivi.
-
Nell'istruzione
if
dell'handler di eventiselectedItemChanged
, inserire i dati nell'osservabileitemData
, inserire i dati nell'osservabilepieSeriesValue
utilizzando la variabile di arraypieSeries
, quindi impostare lo stato di selezioneitemSelected
osservabile sutrue
per l'evento di selezione.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 } };
-
Nell'istruzione
else
del gestore eventiselectedItemChanged
impostare lo stato di selezioneitemSelected
osservabile sufalse
per l'evento di deselezione.selectedItemChanged = (event: ojListView.firstSelectedItemChanged<Item["id"], Item>) => { if (isClicked != null) { . . . } else { // If deselection, hide list this.itemSelected(false); } };
-
Salvare il file
dashboard.ts
.Il file dovrebbe avere un aspetto simile a final-event-dashboard-ts.txt.
Task 3: condizionale visualizzazione elenco nella vista
Aggiornare la vista utilizzando i componenti Oracle JET If Binding per visualizzare in modo condizionale la lista dei dettagli. Il componente Oracle JET If Binding accetta una variabile booleana nel relativo attributo test
. All'interno di un componente Se associazione, nidificare il contenitore Elementi attività e, in un altro componente Se associazione, nidificare il contenitore Dettagli articolo. Utilizzare quindi i componenti If Binding per eseguire il test dello stato degli osservabili activitySelected
e itemSelected
. Il contenuto nidificato del componente Se associazione viene visualizzato se la condizione di test è true
. Visualizzare l'elenco associato ai dati se l'osservabile è true
, in base all'impostazione dell'handler di eventi elenco. Utilizzare un altro componente Se associazione per verificare se l'osservabile è false
, quindi visualizzare un contenitore con un messaggio che indirizza l'utente a effettuare una selezione di elenchi.
-
Passare alla directory
JET_Web_Application/src/ts/views
e aprire il filedashboard.html
in un editor. -
Trovare l'elemento
div
in cuiid="parentContainer2"
. Al di sopra, aggiungere la tag di apertura dell'elemento HTML personalizzatooj-bind-if
, con l'attributotest
impostato sullo stato dell'osservabileactivitySelected
.. . . </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> . . .
Quando l'utente seleziona un'attività dalla lista Attività, il gestore eventi viewModel Attività modificata imposta il valore dell'osservabile
activitySelected
sutrue
. In questo caso, la condizione di testoj-bind-if
viene soddisfatta e l'applicazione visualizza il contenitore Elementi attività per la selezione dell'attività. La notazione()
sulla proprietà osservabile è la convenzione della funzione Knockout per ottenere il valore dell'osservabile invece di ottenere l'istanza dell'oggetto osservabile. -
Trovare l'elemento
div
in cuiid="itemDetailsContainer"
e sopra aggiunge la tag di apertura dell'elemento HTML personalizzatooj-bind-if
, con l'attributotest
impostato sullo stato dell'elemento osservabileitemSelected
.. . . </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> . . .
Quando l'utente seleziona un elemento dall'elenco Elementi attività, il gestore eventi viewModel Elemento modificato imposta l'osservabile
itemSelected
sutrue
. In questo caso, la condizione di testoj-bind-if
viene soddisfatta e l'applicazione visualizza il contenitore Dettagli articolo per la selezione dell'elemento attività. -
Nella parte inferiore del file
dashboard.html
, contare due tag</div>
di chiusura in alto, quindi aggiungere la tag</oj-bind-if>
di chiusura in modo che corrisponda alla tag<oj-bind-if test ="[[activitySelected()]]">
di apertura. Conteggiare un'altra tag</div>
di chiusura, quindi aggiungere la tag</oj-bind-if>
di chiusura per la tag<oj-bind-if test ="[[itemSelected()]]">
di apertura.. . . </oj-chart> </div> </div> </oj-bind-if> </div> </oj-bind-if> </div> </div>
-
Sotto il tag di chiusura
</oj-bind-if>
aggiunto, più vicino alla fine del file, inserire un elemento HTML personalizzatooj-bind-if test="[[!activitySelected()]]"
che contiene un elementodiv
con le classi di supporto per il layout flessibile Oracle JEToj-flex-item oj-sm-6
.. . . </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>
La classe dell'applicazione di supporto Oracle JET
oj-sm-6
specifica che il contenitore per l'intestazioneSelect an Activity to see Items
occupa sei colonne del contenitore per dimensioni di schermo piccole e grandi.Finché l'utente non seleziona un'attività, il valore osservabile di
activitySelected
èfalse
. Allo stesso modo, se l'utente preme il tasto Ctrl e fa clic su un'attività già selezionata, viewModel considera questo evento come una deselezione e l'handler di eventi Attività modificata impostaactivitySelected
osservabile sufalse
. In entrambi i casi, la condizione di testoj-bind-if
viene soddisfatta dalla condizione booleanafalse
e l'applicazione rende l'intestazioneSelect an Activity to see Items
. -
Sotto il primo tag di chiusura
</oj-bind-if>
nel file, aggiungere un elemento HTML personalizzatooj-bind-if test ="[[!itemSelected()]]"
che contiene un elementodiv
con le classi dell'applicazione di supporto per il layout Oracle JEToj-flex-item oj-sm-12 oj-md-6 flex
.. . . </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>
Le classi dell'applicazione di supporto Oracle JET
oj-sm-12
eoj-md-6
specificano che il contenitore perSelect an Item
per visualizzare l'intestazione dei dettagli occupa sei colonne del contenitore per dimensioni dello schermo medie e più grandi oppure occupa dodici colonne del contenitore per dimensioni dello schermo di piccole dimensioni.Finché l'utente non seleziona un elemento attività, il valore dell'osservabile
itemSelected
èfalse
. Allo stesso modo, se l'utente preme il tasto Ctrl e fa clic su un elemento di attività già selezionato, viewModel considera l'evento come deselezionato e l'handler di eventi Articolo modificato impostaitemSelected
osservabile sufalse
. In entrambi i casi, la condizione di testoj-bind-if
viene soddisfatta dalla condizione booleanafalse
e l'applicazione rende l'intestazioneSelect an Item to see details
. -
Salvare il file
dashboard.html
.L'aspetto del file deve essere simile a final-event-dashboard-html.txt.
Task 4: eseguire il test degli elenchi principale e dettagliato
-
Nella finestra del terminale, passare alla directory
JET_Web_Application
ed eseguire l'applicazione.$ ojet serve
-
Nel browser Web fare clic sull'attività Baseball nell'applicazione.
La selezione dell'elenco Attività attiva l'handler di eventi
selectedActivityChanged
. Il contenitore Elementi attività viene visualizzato per l'attività selezionata. -
Nell'elenco Elementi attività fare clic su SureCatch Glove baseball.
La selezione dell'elenco Elementi attività attiva l'handler di eventi
selectedItemChanged
. L'applicazione visualizza il contenitore Dettagli elemento per l'elemento selezionato. -
Nell'elenco Elementi attività, premere Ctrl e fare clic su SureCatch Glove baseball per deselezionarlo.
La deselezione dell'elenco Elementi attività attiva l'handler di eventi
selectedItemChanged
. Il contenitore Dettagli elemento è nascosto. -
Ridimensionare il browser oppure premere Ctrl+Shift+I per attivare Chrome DevTools e selezionare una dimensione dello schermo più piccola, ad esempio Pixel 5, dall'emulatore dimensione dello schermo.
I contenitori sono disposti secondo le dimensioni dello schermo.
-
Chiudere la finestra o la scheda del browser in cui viene visualizzata l'applicazione Web in esecuzione.
-
Nella finestra del terminale premere Ctrl+C e, se richiesto, immettere
y
per uscire dal processo batch di strumenti Oracle JET.
Task 5: (facoltativo) eseguire un'applicazione Web da un'applicazione ripristinata
Se si desidera eseguire l'applicazione Web Oracle JET completata dal codice fornito, è possibile ripristinare l'applicazione dal file di archivio scaricato. Per utilizzare un'applicazione Oracle JET "stripped and zipped", è necessario ripristinare le dipendenze del progetto, compresi gli strumenti Oracle JET e le librerie e i moduli richiesti, all'interno dell'applicazione estratta.
-
Scaricare il file
jet_web_application_masterdetail_final.zip
ed estrarre il contenuto dell'applicazione completata nella cartellajet_web_application_masterdetail_final
. -
Nella finestra del terminale, accedere alla cartella
jet_web_application_masterdetail_final
e ripristinare l'applicazione Web Oracle JET.$ ojet restore
-
Attendere la conferma.
. . . Success: Restore complete
L'applicazione è pronta per essere eseguita.
-
Eseguire l'applicazione Web ed eseguirne il test nel browser.
$ ojet serve
-
Chiudere la finestra o la scheda del browser in cui viene visualizzata l'applicazione Web in esecuzione.
-
Nella finestra del terminale premere Ctrl+C e, se richiesto, immettere
y
per uscire dal processo batch di strumenti Oracle JET.
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di apprendimento gratuito sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare il sito Oracle Help Center.
Handle selection events in an Oracle JET web app
F53156-01
February 2022
Copyright © 2022, Oracle and/or its affiliates.