Tratar eventos de seleção em um aplicativo Web Oracle JET
Introdução
Você pode usar a API do Oracle JavaScript Extension Toolkit (Oracle JET) no viewModel do aplicativo Web Oracle JET para criar handlers de evento que respondam ao listener de alteração de atributo selected
do componente Oracle JET List View. Quando o usuário seleciona ou desmarca um item na lista, o listener de alterações aciona o processador de eventos. Você pode usar o processador de eventos para preencher o provedor de dados do Oracle JET e pode vincular o provedor de dados aos observáveis que o componente de exibição pode usar. O processador de eventos também pode definir a variável booliana que o componente Oracle JET If Binding usa para renderizar condicionalmente seus elementos HTML aninhados na view. Se o atributo selected
do componente View de Lista do Oracle JET para a lista mestre não estiver vazio, a variável será definida como true
e a view renderizará a lista de detalhes do limite de dados. Se o atributo selected
estiver vazio devido a um evento de desmarcação, a variável será definida como falsa e a view renderizará um contêiner na view sem a lista de detalhes do limite de dados.
Objetivos
Neste tutorial, você atualizará a interface de usuário de um aplicativo Web Oracle JET para que possa exibir dados de detalhes mestres. Você aprende a criar um handler de evento JavaScript usando um listener de alteração de propriedade do Oracle JET. Você também aprenderá a usar um componente Oracle JET If Binding para exibir condicionalmente a lista de detalhes para tratar as seleções da lista.
Pré-requisitos
- Um ambiente de desenvolvimento configurado para criar aplicativos Oracle JET, com o runtime JavaScript, Node.js e a interface da linha de comando da release mais recente do Oracle JET
- Conclusão dos tutoriais anteriores nesta programação de estudo, para que você tenha criado o aplicativo Web Oracle JET na pasta
JET_Web_Application
- O download opcional do aplicativo jet_web_application_masterdetail_final.zip concluído
Tarefa 1: Definir Comportamento de Seleção na Exibição
Atualize a exibição para personalizar os componentes de Exibição de Lista para tratar uma seleção de linha na lista Atividades e na lista Itens de Atividade. O componente View de Lista do Oracle JET define o atributo first-selected-item
que o componente preenche com os itens de dados da seleção de linha do usuário e que você pode ler em um observável usando uma vinculação bidirecional. Use o atributo on-selection-changed
do componente para capturar e processar eventos de seleção/desmarcação da lista vinculando um listener de eventos definido em viewModel.
-
Navegue até o diretório
JET_Web_Application/src/ts/views
e abra o arquivodashboard.html
em um editor. -
Abaixo do cabeçalho Atividades, localize o elemento HTML personalizado
oj-list-view
em queid="activitiesList"
e adicione os atributos de comportamento de seleção após o atributogridlines.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"> . . .
-
Abaixo do cabeçalho Itens de Atividade, localize o elemento HTML personalizado
oj-list-view
em queid="itemsList"
e adicione os atributos de comportamento de seleção após o atributogridlines.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"> . . .
-
Salve o arquivo
dashboard.html
.Seu arquivo deve ser semelhante a event-task1-dashboard-html.txt.
Tarefa 2: Criar Handlers de Eventos no ViewModel
Atualize o viewModel para adicionar handlers de eventos dos componentes Exibição de Lista para responder às seleções na lista Atividades e na lista Itens de Atividade. O componente View de Lista do Oracle JET define um atributo selected
, no qual a API de View de Lista do Oracle JET define um listener de alteração de propriedade. Seu handler de eventos define os observáveis selectedActivity
e selectedItem
quando o usuário faz uma seleção de lista e o valor do atributo selected
é alterado.
-
Navegue até o diretório
JET_Web_Application/src/ts/viewModels
e abra o arquivodashboard.ts
em um editor. -
Abaixo da definição observável
pieSeriesValue
, antes deconstructor()
, adicione observáveis para a seleção da Lista de Atividades e a seleção da lista Itens da Atividade.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() { . . .
-
Na parte superior do arquivo
dashboard.ts
, importe a classeObservableKeySet
do móduloojs/ojknockout-keyset
e a classeojListView
do móduloojs/ojlistview
.import * as ko from "knockout"; . . . import "ojs/ojavatar"; import { ObservableKeySet } from "ojs/ojknockout-keyset"; import { ojListView } from "ojs/ojlistview";
-
Antes da classe
DashboardViewModel
, adicione o alias do tipoActivityItems
.. . . type ActivityItems = { id: number; name: string; items: Array<Item>; short_desc: string; image: string; }; class DashboardViewModel { . . .
-
Após a declaração do método
constructor()
da classeDashboardViewModel
, adicione o handler de eventoselectedActivityChanged
com condições de teste para tratar os eventos de seleção e desseleção.} // 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 } };
Implemente esse gerenciador de eventos nas próximas etapas.
-
Na instrução
if
do handler de eventosselectedActivityChanged
, preencha o observávelitemsDataProvider
usando a variávelitemsArray
e defina o estado de seleçãoactivitySelected
eitemSelected
observáveis comotrue
para o evento de seleção.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 } };
-
Na instrução
else
do handler de eventoselectedActivityChanged
, defina os observáveis de estado de seleçãoactivitySelected
eitemSelected
comofalse
para o evento de desseleção.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); } };
-
Após o handler de eventos
selectedActivityChanged
, adicione um handler de eventosselectedItemChanged
com condições de teste para tratar os eventos de seleção e desseleção.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 } };
Implemente esse gerenciador de eventos nas próximas etapas.
-
Na instrução
if
do handler de eventosselectedItemChanged
, preencha o observávelitemData
, preencha o observávelpieSeriesValue
usando a variável de arraypieSeries
e defina o estado de seleçãoitemSelected
observável comotrue
para o evento de seleção.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 } };
-
Na instrução
else
do handler de eventoselectedItemChanged
, defina o estado de seleçãoitemSelected
observável comofalse
para o evento de desseleção.selectedItemChanged = (event: ojListView.firstSelectedItemChanged<Item["id"], Item>) => { if (isClicked != null) { . . . } else { // If deselection, hide list this.itemSelected(false); } };
-
Salve o arquivo
dashboard.ts
.Seu arquivo deve ser semelhante a final-event-dashboard-ts.txt.
Tarefa 3: Condicionalizar Renderização de Lista na Exibição
Atualize a view usando o Oracle JET If Binding de componentes para renderizar condicionalmente a lista de detalhes. O componente If Binding do Oracle JET usa uma variável Booliana em seu atributo test
. Dentro de um componente If Binding, aninhe o contêiner Activity Items e, em outro componente If Binding, aninhe o contêiner Item Details. Em seguida, use os componentes de Vinculação If para testar o estado dos observáveis activitySelected
e itemSelected
. O conteúdo aninhado do componente de Vinculação If será renderizado se a condição de teste for true
. Exiba a lista de limites de dados se o observável for true
, conforme definido pelo handler de eventos da lista. Use outro componente Se Vinculação para testar se o observável é false
e, em seguida, exiba um contêiner com uma mensagem direcionando o usuário para fazer uma seleção de lista.
-
Navegue até o diretório
JET_Web_Application/src/ts/views
e abra o arquivodashboard.html
em um editor. -
Localize o elemento
div
em queid="parentContainer2"
. Acima, adicione a tag de abertura do elemento HTML personalizadooj-bind-if
, com o atributotest
definido para o estado do observávelactivitySelected
.. . . </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 o usuário seleciona uma atividade na lista Atividades, o handler de eventos viewModel Atividade Alterada define o valor do observável
activitySelected
comotrue
. Nesse caso, a condição de testeoj-bind-if
é satisfeita e o aplicativo renderiza o contêiner Itens de Atividade para a seleção da atividade. A notação()
na propriedade observável é a convenção da função Knockout para obter o valor do observável em vez de obter a instância do objeto observável. -
Localize o elemento
div
em queid="itemDetailsContainer"
e, acima dele, adicione a tag de abertura do elemento HTML personalizadooj-bind-if
, com o atributotest
definido como o estado do observávelitemSelected
.. . . </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 o usuário seleciona um item na lista Itens de Atividade, o handler de eventos viewModel Item Alterado define o observável
itemSelected
comotrue
. Nesse caso, a condição de testeoj-bind-if
é satisfeita e o aplicativo renderiza o contêiner Detalhes do Item para a seleção do item da atividade. -
Na parte inferior do arquivo
dashboard.html
, conte duas tags de fechamento</div>
para cima e, em seguida, adicione a tag de fechamento</oj-bind-if>
para corresponder à tag de abertura<oj-bind-if test ="[[activitySelected()]]">
. Conte mais uma tag de fechamento</div>
e, em seguida, adicione a tag de fechamento</oj-bind-if>
para a tag de abertura<oj-bind-if test ="[[itemSelected()]]">
.. . . </oj-chart> </div> </div> </oj-bind-if> </div> </oj-bind-if> </div> </div>
-
Abaixo da tag de fechamento
</oj-bind-if>
adicionada, mais próxima do final do arquivo, insira um elemento HTML personalizadooj-bind-if test="[[!activitySelected()]]"
que contenha um elementodiv
com as classes auxiliares de layout flexível do 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>
A classe helper
oj-sm-6
do Oracle JET especifica que o contêiner para o cabeçalhoSelect an Activity to see Items
ocupa seis colunas de contêiner para tamanhos de tela pequenos e maiores.Até que o usuário selecione uma atividade, o valor do observável
activitySelected
éfalse
. Da mesma forma, se o usuário pressionar a tecla Ctrl e clicar em uma atividade já selecionada, viewModel tratará esse evento como uma desmarcação, e o manipulador de eventos Atividade Alterada definiráactivitySelected
observável comofalse
. Em ambos os casos, a condição de testeoj-bind-if
é satisfeita pela condição boolianafalse
e o aplicativo renderiza o cabeçalhoSelect an Activity to see Items
. -
Abaixo da primeira tag de fechamento
</oj-bind-if>
no arquivo, adicione um elemento HTML personalizadooj-bind-if test ="[[!itemSelected()]]"
que contenha um elementodiv
com as classes auxiliares de layoutoj-flex-item oj-sm-12 oj-md-6 flex
do Oracle JET.. . . </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>
As classes auxiliares Oracle JET
oj-sm-12
eoj-md-6
especificam que o contêiner deSelect an Item
para ver os detalhes do cabeçalho ocupa seis colunas de contêiner para tamanhos de tela médios e maiores ou ocupa doze colunas de contêiner para tamanhos de tela pequenos.Até que o usuário selecione um item de atividade, o valor do observável
itemSelected
éfalse
. Da mesma forma, se o usuário pressionar a tecla Ctrl e clicar em um item de atividade já selecionado, viewModel tratará esse evento como uma desseleção, e o manipulador de eventos Item Alterado definiráitemSelected
observável comofalse
. Em ambos os casos, a condição de testeoj-bind-if
é satisfeita pela condição boolianafalse
e o aplicativo renderiza o cabeçalhoSelect an Item to see details
. -
Salve o arquivo
dashboard.html
.Seu arquivo deve ser semelhante a final-event-dashboard-html.txt.
Tarefa 4: Testar as Listas Mestre e de Detalhes
-
Na janela do terminal, altere para o diretório
JET_Web_Application
e execute o aplicativo.$ ojet serve
-
No Web browser, clique na atividade Baseball em seu aplicativo.
A seleção da lista Atividades aciona o handler de evento
selectedActivityChanged
. O contêiner Itens de Atividade é renderizado para a atividade selecionada. -
Na lista Itens de Atividade, clique em SureCatch Globo de Baseball.
A seleção da lista Itens de Atividade aciona o handler de evento
selectedItemChanged
. O aplicativo renderiza o contêiner Detalhes do Item para o item selecionado. -
Na lista Itens de Atividade, pressione Ctrl e clique em SureCatch Baseball Glove para desmarcá-la.
A desseleção da lista Itens de Atividade aciona o handler de evento
selectedItemChanged
. O contêiner Detalhes do Item está oculto. -
Redimensione o navegador ou pressione Ctrl+Shift+I para abrir o Chrome DevTools e selecione um tamanho de tela menor, como Pixel 5, no emulador de tamanho de tela.
Os contêineres são organizados de acordo com o tamanho da tela.
-
Feche a janela ou guia do browser que exibe seu aplicativo Web em execução.
-
Na janela do terminal, pressione Ctrl+C e, se solicitado, digite
y
para sair do job em batch de ferramentas do Oracle JET.
Tarefa 5: (Opcional) Executar um Aplicativo Web de um Aplicativo Restaurado
Se quiser executar o aplicativo Web Oracle JET concluído do código fornecido, você poderá restaurar o aplicativo do arquivo compactado baixado. Para trabalhar com um aplicativo Oracle JET "distribuído e compactado", você deve restaurar as dependências do projeto, incluindo o conjunto de ferramentas Oracle JET e as bibliotecas e módulos necessários, dentro do aplicativo extraído.
-
Faça download do arquivo
jet_web_application_masterdetail_final.zip
e extraia o conteúdo do aplicativo concluído para a pastajet_web_application_masterdetail_final
. -
Na janela do terminal, navegue até a pasta
jet_web_application_masterdetail_final
e restaure o aplicativo Web Oracle JET.$ ojet restore
-
Aguarde a confirmação.
. . . Success: Restore complete
O aplicativo está pronto para ser executado.
-
Execute o aplicativo Web e teste-o no browser.
$ ojet serve
-
Feche a janela ou guia do browser que exibe seu aplicativo Web em execução.
-
Na janela do terminal, pressione Ctrl+C e, se solicitado, digite
y
para sair do job em batch de ferramentas do Oracle JET.
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Handle selection events in an Oracle JET web app
F53157-01
February 2022
Copyright © 2022, Oracle and/or its affiliates.