Manejar eventos de selección en una aplicación DOM virtual de Oracle JET
Introducción
En la aplicación DOM virtual de Oracle JavaScript Extension Toolkit (Oracle JET), puede utilizar una combinación de recursos de Preact, incluidos el estado, las propiedades y los enlaces, para crear listeners de cambio y manejadores de eventos que respondan a la selección y anulación de la selección en los componentes de la vista de lista de Oracle JET. Cuando el usuario selecciona una actividad o un elemento de actividad en las vistas de lista maestra o de detalles de la aplicación, el listener de cambio dispara el manejador de eventos, que crea el objeto de proveedor de datos de Oracle JET que rellena los componentes de vista de lista en los contenedores de actividad e ítem de actividad.
En los componentes del contenedor principal, implante una representación condicional de los componentes secundarios de modo que si determinados atributos selected de los componentes de la vista de lista de Oracle JET no están vacíos, una variable se defina en true y la vista muestre la lista de detalles de la base de datos. Si el atributo selected está vacío debido a un evento de anulación de selección, la variable se define en false y los componentes secundarios se representan sin vista de detalles.
Objetivos
En este tutorial, actualizará la interfaz de usuario de una aplicación DOM virtual de Oracle JET para que pueda mostrar datos maestro-detalle que respondan a los eventos de selección de componentes de vista de lista de Oracle JET.
Requisitos
- Un entorno de desarrollo configurado para crear aplicaciones DOM virtuales de Oracle JET que incluye una instalación de Node.js
- Finalización del tutorial anterior en esta ruta de aprendizaje, Creación de la vista de detalles en una aplicación Oracle JET Virtual DOM
- La aplicación completa jet-virtual-dom-app-temp.zip se descargó de manera opcional
Tarea 1: Modificar contenedor principal 1 para selección
-
Navegue hasta el directorio
JET-Virtual-DOM-app/src/componentsy abra el archivoParentContainer1.tsxen un editor. -
Agregue una sentencia
importpara el enlaceuseStateen la parte superior del archivo.import { useState } from 'preact/hooks'; -
Cree un alias de tipo
Itemy una variableINIT_SELECTEDACTIVITY.type Item = { id: number; name: string; short_desc?: string; price?: number; quantity?: number; quantity_shipped?: number; quantity_instock?: number; activity_id?: number; image?: string; }; let INIT_SELECTEDACTIVITY: Item | null = null; -
Antes de la sentencia
returnen la funciónParentContainer1, agregue el siguiente código.const [selectedActivity, setSelectedActivity] = useState(INIT_SELECTEDACTIVITY); const showActivityItems = () => { return selectedActivity != null ? true : false; }; const activityChangedHandler = (value: Item) => { setSelectedActivity(value); }; -
Agregue el atributo
onActivityChangedal elementoActivityContainery sustituya el elementoParentContainer2por un par de sentencias condicionales utilizadas para mostrar el elementoParentContainer2con un valor de propiedadselectedActivityprocedente del componenteActivityContainero para mostrar una cabecera con instrucciones para seleccionar una actividad. Suprima también las clases de estilooj-bg-warning-20yoj-paneldel elementodivpara eliminar el color de fondo amarillo y el borde del contenedor.return ( <div id="parentContainer1" class="oj-flex oj-flex-init"> <ActivityContainer data={activityDataProvider} onActivityChanged={activityChangedHandler} /> {showActivityItems() && <ParentContainer2 activity={selectedActivity} />} {!showActivityItems() && ( <h4 class="oj-typography-subheading-sm">Select activity to view items</h4> )} </div> );Guarde el archivo. El código debe tener un aspecto similar a
parent-container1-1-tsx.txt
Tarea 2: Modificación del contenedor de actividad para selección
-
Navegue hasta el directorio
JET-Virtual-DOM-app/src/components/Activityy abra el archivoActivityContainer.tsxen un editor. -
Agregue las siguientes sentencias
importa la parte superior del archivo.import { KeySetImpl, KeySet } from 'ojs/ojkeyset'; import { useMemo } from 'preact/hooks'; -
Agregue la propiedad
onActivityChangedal alias de tipoProps. Cree también un alias de tipoItem.type Props = { data?: MutableArrayDataProvider<Activity['id'], Activity>; value?: string; onActivityChanged: (value: Item) => void; }; type Item = { id: number; name: string; short_desc?: string; price?: number; quantity?: number; quantity_shipped?: number; quantity_instock?: number; activity_id?: number; image?: string; }; -
Antes de la sentencia
returnen la funciónActivityContainer, agregue el siguiente código.const selectedActivityChanged = ( event: ojListView.firstSelectedItemChanged<Item['id'], Item> ) => { props.onActivityChanged(event.detail.value.data); }; const activityValue = useMemo(() => { return new KeySetImpl([props.value]) as KeySet<Activity['name']>; }, [props.value]); -
Agregue los atributos
selectedyonfirstSelectedItemChangedal componente Oracle JET List View. Suprima tambiénoj-bg-info-30del elementodivpara eliminar el color de fondo azul del contenedor.selected = { activityValue }; onfirstSelectedItemChanged = { selectedActivityChanged };Guarde el archivo. Su código debe tener un aspecto similar a
activity-container-1-tsx.txt.
Tarea 3: Modificar contenedor principal 2 para selección
-
Navegue hasta el directorio
JET-Virtual-DOM-app/src/componentsy abra el archivoParentContainer2.tsxen un editor. -
Agregue una sentencia
importpara los siguientes enlaces de Preact en la parte superior del archivo.import { useState, useEffect, useCallback } from 'preact/hooks'; -
Agregue un alias de tipo
Props.type Props = { activity: Item | null; }; -
Cambie el nombre de
const activityItemDPaconst INIT_DATAPROVIDERy suprima la variableconst specificItem. -
Agregue
propsa la definición de funciónParentContainer2const ParentContainer2 = (props: Props) => { -
Agregue enlaces de estado y de precisión antes de la sentencia
returnde la función.const [selectedItemVal, setSelectedItemVal] = useState<Item | null>(null); const [activityItemDP, setactivityItemDP] = useState(INIT_DATAPROVIDER); const activityItemChangeHandler = useCallback( (item: Item) => { setSelectedItemVal(item); }, [selectedItemVal] ); const showItems = useCallback(() => { return selectedItemVal === null ? false : true; }, [selectedItemVal]); -
Agregue un enlace
useEffectantes de la sentenciareturn.useEffect(() => { let actID = props.activity.id - 1; let activityItemsArray = activityData[actID].items; setactivityItemDP( new MutableArrayDataProvider<ActivityItem['id'], ActivityItem>(activityItemsArray, { keyAttributes: 'id', }) ); }, [props.activity]); -
Agregue los atributos de datos
selectedActivityyonItemChangedal elementoActivityItemContainer. Sustituya el elementoItemDetailContainerpor un par de sentencias condicionales para mostrar el elementoItemDetailContainercon el valor de elemento de actividad seleccionado o mostrar una cabecera con instrucciones para seleccionar un elemento de actividad. Suprima también las clases de estilooj-panelyoj-bg-danger-30del elementodivpara eliminar el color de fondo rojo y el borde del contenedor.<div id="parentContainer2" class="oj-flex oj-flex-item oj-lg-padding-6x-horizontal oj-md-8 oj-sm-12"> <ActivityItemContainer selectedActivity={props.activity} data={activityItemDP} onItemChanged={activityItemChangeHandler} /> {showItems() && <ItemDetailContainer item={selectedItemVal} />} {!showItems() && ( <h4 class="oj-typography-subheading-sm">Select activity item to see details</h4> )} </div>El código debe tener un aspecto similar a
parent-container2-1-tsx.txt
Tarea 4: Modificación del contenedor de elementos de actividad para su selección
-
Navegue hasta el directorio
JET-Virtual-DOM-app/src/components/ActivityItemy abra el archivoActivityItemContainer.tsxen un editor. -
Agregue una sentencia
importpara los siguientes enlaces de Preact en la parte superior del archivo.import { useState, useCallback } from 'preact/hooks'; -
Sustituya el alias de tipo
Props.type Props = { data?: MutableArrayDataProvider<ActivityItem['id'], ActivityItem>; selectedActivity: Item | null; onItemChanged: (item: Item) => void; }; -
Agregue una variable
DEFAULT_ACTIVITY_ITEM_STATE.const DEFAULT_ACTIVITY_ITEM_STATE: Partial<Item> = {}; -
Agregue el siguiente código antes de la sentencia
returnen la definición de funciónActivityItemContainer.// new code const activityItemDataProvider = props.data; const [activityItemValue, setActivityItemValue] = useState(DEFAULT_ACTIVITY_ITEM_STATE); const [itemData, setItemData] = useState<Item>(props.selectedActivity!); const selectedActivityItemChanged = useCallback( (event: ojListView.firstSelectedItemChanged<Item['id'], Item>) => { let tempItem = event.detail.value.data; props.onItemChanged(tempItem); setActivityItemValue(tempItem); setItemData(tempItem); }, [activityItemValue] ); -
En el elemento Oracle JET List View, agregue un atributo
onFirstSelectedItemChangedy sustituya el atributodata. Suprima también la clase de estilooj-bg-success-20del elementodivdondeid="activityItemsContainer"elimina el color de fondo verde del contenedor.<div id="activityItemsContainer" class="oj-flex-item oj-sm-padding-4x-start oj-md-6 oj-sm-12"> <div id="container"> <h3>Activity Items</h3> <oj-list-view id="activitiesList" class="item-display" aria-labelledby="activitiesHeader" data={activityItemDataProvider} gridlines={gridlinesItemVisible} selectionMode="single" onfirstSelectedItemChanged={selectedActivityItemChanged} scrollPolicy="loadMoreOnScroll" scrollPolicyOptions={scrollPolicyOpts}> <template slot="itemTemplate" render={listItemRenderer}></template> </oj-list-view>Guarde el archivo. El código debe tener un aspecto similar a
activity-item-container-tsx.txt -
Navegue hasta el directorio
JET-Virtual-DOM-app/src/components/ItemDetaily abra el archivoItemDetailContainer.tsxen un editor. -
En la sentencia
returnde la funciónItemDetailContainer, suprima la clase de estilooj-bg-neutral-30del elementodivpara eliminar el color de fondo gris del contenedor. Guarde el archivo.
Tarea 5: Probar eventos de selección en la aplicación DOM virtual
-
En la ventana de terminal, cambie al directorio
JET-Virtual-DOM-appy ejecute la aplicación DOM virtual.npx ojet serve -
En la aplicación DOM virtual, haga clic en la actividad Béisbol.
La selección de la lista Actividades dispara el manejador de eventos
selectedActivityChanged. La aplicación DOM virtual representa los datos del ítem de actividad de la actividad seleccionada.
-
En la lista Elementos de actividad, haga clic en SureCatch Guante de béisbol.
La selección de lista Ítems de actividad dispara el manejador de eventos
selectedActivityItemChanged. La aplicación DOM virtual presenta el contenedor de detalles de artículo con los datos del artículo de actividad seleccionado.
-
En la lista Elementos de actividad, pulse Ctrl y haga clic en SureCatch Guante de béisbol para anular la selección.
La anulación de la selección de la lista Elementos de actividad dispara el manejador de eventos
selectedItemChanged. El contenedor de detalles de artículo está oculto.
-
Pulse Ctrl+Shift+I o haga clic con el botón derecho en la página y seleccione Inspeccionar para abrir la vista de página en las herramientas de desarrollador.
-
En la barra de herramientas de Chrome DevTools, haga clic en
para cambiar al modo de dispositivo. -
En el menú desplegable Dimensiones del emulador de pantalla, seleccione un dispositivo con un tamaño de pantalla pequeño, como el Pixel 5, para verificar los cambios de contenido.

-
Cierre la ventana o el separador del explorador que muestra la aplicación DOM virtual en ejecución.
-
En la ventana de terminal, pulse Ctrl+C y, si se le solicita, introduzca
ypara salir del trabajo por lotes de herramientas de Oracle JET.
Tarea 6: (Opcional) Ejecutar una aplicación DOM virtual desde una aplicación restaurada
Si desea ejecutar la aplicación DOM virtual de Oracle JET completa desde el código proporcionado, puede restaurar la aplicación DOM virtual desde el archivo de almacenamiento descargado. Para trabajar con una aplicación de DOM virtual de Oracle JET stripped and zipped, debe restaurar las dependencias del proyecto, incluidas las herramientas de Oracle JET y las bibliotecas y módulos necesarios, dentro de la aplicación de DOM virtual extraída.
-
Descargue el archivo
jet-virtual-dom-app-temp.zip, cámbiele el nombre aJET-Virtual-DOM-app.zipy extraiga el contenido en el directorioJET-Virtual-DOM-app. -
En la ventana de terminal, navegue hasta el directorio
JET-Virtual-DOM-appy restaure la aplicación Oracle JET Virtual DOM.npm install -
Espere la confirmación.
Success: Restore completeLa aplicación DOM virtual está lista para ejecutarse.
-
Ejecute la aplicación DOM virtual y pruébela en el explorador.
npx ojet serve -
Cierre la ventana o el separador del explorador que muestra la aplicación DOM virtual en ejecución.
-
En la ventana de terminal, pulse Ctrl+C y, si se le solicita, introduzca
ypara salir del trabajo por lotes de herramientas de Oracle JET.
Siguiente paso
Este tutorial concluye el módulo Master Detail Views in Oracle JET en esta ruta de aprendizaje sobre la creación de aplicaciones web DOM virtuales.
- Creación de la Vista Maestra en una Aplicación Oracle JET Virtual DOM
- Creación de la Vista de Detalle en una Aplicación Oracle JET Virtual DOM
- Gestión de Eventos de Selección en una Aplicación Oracle JET Virtual DOM
Puede continuar con el siguiente tutorial de la ruta de aprendizaje, Recuperación de datos de la API de REST en Oracle JET, en el módulo Operaciones de CRUD mediante un servicio REST.
También puede volver a la página principal de la ruta de aprendizaje de DOM virtual para acceder a todos los módulos sobre la creación de aplicaciones de DOM virtuales.
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Handle selection events in an Oracle JET virtual DOM app
F72843-02