Créer la vue détaillée dans une application Web Oracle JET
Introduction
Les composants Oracle JavaScript Extension Toolkit (Oracle JET) conservent la relation hiérarchique des objets de données maître et détail, telle que définie par la source de données. Dans viewModel pour l'application Web Oracle JET, vous pouvez utiliser l'API Oracle JET pour créer un objet de fournisseur de données. L'objet représente un tableau de données que vous remplissez à partir des objets de données enfant d'une banque de données de document JavaScript Object Notation (JSON). Le fournisseur de données Oracle JET extrait les objets de données enfant en fonction de l'attribut de clé id de l'objet de données parent en cours. Dans la vue de l'application Web Oracle JET, l'attribut data du composant Vue Liste Oracle JET est lié au fournisseur de données via une observable Knockout. Le Knockout observable est également déclaré dans le code source viewModel de l'application. Ce code renseigne l'élément observable en tant qu'instance du fournisseur de données de liste détaillée.
Objectifs
Dans ce tutoriel, vous allez lire les données hiérarchiques maître-détail à partir d'un document JSON local et afficher la vue détaillée dans une application Web Oracle JET. Vous apprendrez à définir des éléments de liaison de données pour les objets de données enfant afin d'alimenter un composant Oracle JET List View, plusieurs composants Oracle JET Input Text et un composant Oracle JET Chart.
Prérequis
- Environnement de développement configuré pour créer des applications Oracle JET avec l'exécution JavaScript, Node.js et la dernière interface de ligne de commande Oracle JET installée
- Réalisation du tutoriel précédent dans ce parcours de formation, afin que vous ayez créé le dossier
JET_Web_Application
Tâche 1 : liaison de données à la liste détaillée des éléments d'activité dans la vue
Remplacez la liste Eléments d'activité liée aux données statiques par un composant Vue Liste Oracle JET lié à plusieurs éléments de données des objets enfant Eléments d'activité.
-
Accédez au répertoire
JET_Web_Application/src/ts/viewset ouvrez le fichierdashboard.htmldans un éditeur. -
Recherchez l'élément
divoùid="container", puis supprimez-le et l'élément personnaliséoj-modulequ'il contient.<div id="activityItemsContainer" class="oj-flex-item oj-md-6 oj-sm-12"> <div id="container"> <oj-module config="[[moduleConfig]]"></oj-module> </div> </div> <!-- Delete the div element with id="container" so that your code is similar to the following: --> <div id="activityItemsContainer" class="oj-flex-item oj-md-6 oj-sm-12"> </div> . . . -
Dans l'élément
divoùid="activityItemsContainer", ajoutez un élément d'en-têteh3pour la liste de détails Eléments d'activité.<div id="activityItemsContainer" class="oj-flex-item oj-md-6 oj-sm-12"> <h3 id="itemsListHeader">Activity Items</h3> </div> -
Après la balise de clôture de l'élément
h3que vous avez créé, ajoutez un élément HTML personnaliséoj-list-viewpour afficher la liste de détails des éléments d'activité et un élémenttemplateavec un attributslotà appliquer au contenu de la liste de détails.<h3 id="itemsListHeader">Activity Items</h3> <oj-list-view id="itemsList" class="item-display" data="[[itemsDataProvider]]" aria-labelledby="itemsListHeader" gridlines.item="visible"> <template slot="itemTemplate"> </template> </oj-list-view>Le composant Vue Liste Oracle JET utilisé dans un élément HTML
templateincorporé avec un attributsloten tant qu'espace réservé instancie le contenu de la liste Détails des éléments d'activité lors de l'exécution. -
Dans l'élément
templateque vous avez créé, ajoutez trois élémentsdivavec du code pour lier l'image et les éléments de données de nom pour chaque objet enfant Eléments d'activité.<template slot="itemTemplate"> <div class="oj-flex no-wrap"> <span class="demo-thumbnail oj-flex-item" :style.background-image="[[' url('+$current.data.image+')']]"></span> <div class="demo-content oj-flex-item"> <div> <strong> <oj-bind-text value="[[$current.data.name]]"></oj-bind-text> </strong> </div> </div> </div> </template>Le code
$current.data.imageet$current.data.namelie les données et un élément HTMLtemplateaffiche une image et un nom d'élément d'activité pour la liste de détails Eléments d'activité. Le préfixe$currentreprésente l'objet enfant en cours que le fournisseur de données pour le composant Vue Liste Oracle JET transmet au modèle. -
Enregistrez le fichier
dashboard.htmlet laissez-le ouvert dans votre éditeur.Votre fichier doit ressembler à detail-list-task1-dashboard-html.txt.
Tâche 2 : création des objets enfant des éléments d'activité dans ViewModel
Remplacez le modèle en ligne oj-module que vous avez créé dans le parcours de formation précédent pour afficher la liste des éléments d'activité avec un appel de document JSON afin de lire les objets enfant des éléments d'activité à partir d'un document JSON local. Dans itemsDataProvider, créez une instance d'une classe Oracle JET MutableArrayDataProvider qui représente un tableau d'objets enfant défini par le document JSON. Liez ensuite l'instance itemsArray à une instance observable itemsDataProvider. Le composant Vue Liste Oracle JET de la vue référence cet élément observable sur son attribut data pour afficher la liste détaillée des éléments d'activité.
-
Accédez au répertoire
JET_Web_Application/src/ts/viewModelset ouvrez le fichierdashboard.tsdans un éditeur. -
En haut du fichier
dashboard.ts, après la déclaration de typeActivity, déclarez le typeItemsuivant.type Activity = { id: number; }; type Item = { id: number; name: string; short_desc: string; price: number; quantity: number; quantity_shipped: number; quantity_instock: number; activity_id: number; image: string; }; . . . -
Supprimez le code de la déclaration de
const lg_xl_viewjusqu'à ce qu'il n'inclue pas la déclaration dethis.chartTypes. Le bloc de code se termine par une ligne de commentaire qui indiqueEnd of oj-module code. Un appel de document JSON remplacera les données statiques et le code de modèle en ligne.Votre fichier doit ressembler à detail-list-task2a-dashboard-ts.txt.
-
A partir des imports de module en haut de
dashboard.ts, supprimez les instructions importHtmlUtils,ResponsiveUtils,ResponsiveKnockoutUtilsetojmodule-elementnon utilisées. -
Ajoutez une instruction import pour le module
ojs/ojavatarà la liste d'import. Le moduleojavatarprend en charge la vue dans la section suivante de ce tutoriel.import * as AccUtils from "../accUtils"; import * as ko from "knockout"; import MutableArrayDataProvider = require("ojs/ojmutablearraydataprovider"); import "ojs/ojselectsingle"; import "ojs/ojlabel"; import "ojs/ojchart"; import * as storeData from "text!../store_data.json"; import "ojs/ojlistview"; import "ojs/ojavatar"; -
Après la définition
this.activityDataProvider, dans la fonctionconstructor, ajoutez des définitions pouractivitiesArrayetitemsArray. Déclarez ensuitethis.itemsDataProvideren tant qu'instance deMutableArrayDataProvider. Cette opération analyse les données du magasin et rend les objets enfant du premier objet parent Activité disponibles dans le composant Vue Liste Oracle JET. Dans le tutoriel suivant, vous allez définir l'objet Activité de façon dynamique à l'aide de gestionnaires d'événements.. . . let activitiesArray = JSON.parse(storeData); let itemsArray = activitiesArray[0].items; this.itemsDataProvider = new MutableArrayDataProvider<Item["id"], Item>( itemsArray, { keyAttributes: "id" } ); } // closing bracket of constructor function . . .Enlevez ensuite les annotations de type non utilisées pour
largeetmoduleConfig, puis ajoutez des annotations de type pouritemsArrayetitemsDataProvider.class DashboardViewModel { chartTypes: Array<Object>; chartTypesDP: MutableArrayDataProvider<ChartType["value"], ChartType>; chartData: Array<Object>; chartDataProvider: MutableArrayDataProvider<string, {}>; activityDataProvider: MutableArrayDataProvider<Activity["id"], Activity>; val: ko.Observable<string>; itemsArray: Array<Object>; itemsDataProvider: MutableArrayDataProvider<Item["id"], Item>;Votre fichier doit ressembler à detail-list-task2b-dashboard-ts.txt.
Tâche 3 : exécution de l'application Web
La commande ojet serve permet d'apporter des modifications à votre code d'application qui sont immédiatement reflétées dans le navigateur Web.
-
Dans la fenêtre de terminal, accédez au répertoire
JET_Web_Applicationet exécutez l'application.$ ojet serveDans l'onglet Tableau de bord, le navigateur Web affiche la liste des détails liés aux données avec l'en-tête Eléments d'activité.

-
Laissez la fenêtre de terminal et le navigateur qui affiche votre application Web ouverts.
Tâche 4 : Détails de l'élément de liaison de données et graphique à secteurs dans la vue
Remplacez les graphiques à secteurs et à barres Détails article par les éléments suivants :
- Composant Avatar Oracle JET lié à l'image d'article d'un objet enfant Eléments d'activité
- Plusieurs composants Champ de texte Oracle JET liés aux éléments de données de cet objet enfant Eléments d'activité
- Composant de graphique à secteurs lié aux éléments de données de graphique du même objet enfant Eléments d'activité
-
Dans le fichier
dashboard.html, dans l'élémentdivoùid="itemDetailsContainer", recherchez l'en-tête Détails de l'élément. Sous l'en-tête, ajoutez une règle horizontale suivie d'un élément HTML personnaliséoj-avatarlié à l'élément de données d'image pour un objet enfant Eléments d'activité.<div id="itemDetailsContainer" class="oj-flex-item oj-panel oj-bg-neutral-30 oj-md-6 oj-sm-12"> <h3>Item Details</h3> <hr class="hr-margin" /> <oj-avatar role="img" size="lg" :aria-label="[['product image for '+ itemData().name]]" :src="[[itemData().image]]" class="float-right"> </oj-avatar>L'observable
itemDataremplit le composant Avatar Oracle JET à l'aide d'une instance de fournisseur de données que vous créez dans l'application viewModel. La fonctionitemData().imageest la notation observable Knockout permettant de lire la valeur en cours d'un élément de données. L'élément de données est identifié par la propriétéimagede l'objet enfant Eléments d'activité. -
Dans
dashboard.html, sous la balise de fermeture de l'élémentoj-avatarque vous avez créé, supprimez l'élément HTML personnaliséoj-label for="basicSelect"et l'élémentoj-select-single. -
Sous la balise de clôture de l'élément
oj-avatarque vous avez créé, ajoutez quatre élémentsdivavec des éléments HTML personnalisésoj-bind-textliés aux éléments de données de nom, de description abrégée, de prix et d'ID d'un objet enfant Eléments d'activité.. . . </oj-avatar> <div id="itemName" class="data-name"> <oj-bind-text value="[[itemData().name]]"></oj-bind-text> </div> <div id="itemDesc" class="data-desc"> <oj-bind-text value="[[itemData().short_desc]]"></oj-bind-text> </div> <div id="itemPrice"> <oj-bind-text value="[['Price: ' + itemData().price + ' each']]"></oj-bind-text> </div> <div id="itemId"> <oj-bind-text value="[['Item Id: ' + itemData().id]]"></oj-bind-text> </div> . . .Les observables
itemDataalimentent le composant de liaison de texte Oracle JET à l'aide d'un fournisseur de données que vous créez dans l'application viewModel. La fonctionitemData().<prop_name>lit la valeur en cours de l'élément de données nommé. Les éléments de données sont identifiés par les propriétésname,short_desc,priceetidde l'objet enfant Eléments d'activité. -
Accédez au répertoire
JET_Web_Application/src/csset ouvrez le fichierapp.csspour ajouter les définitions de style suivantes..hr-margin { margin-top: 12px; } .data-name { font-size: 20px; font-weight: bolder; } .data-desc { font-size: 14px; font-weight: 400; font-style: italic; margin-bottom: 10px; } .float-right { float: right; }Votre fichier doit ressembler à app-css-final.txt.
-
Sous les éléments
divque vous avez créés, supprimez l'élément HTML personnaliséoj-chart id="barChart". -
Après la balise
</div>de fermeture de l'élémentdiv id="itemId", ajoutez un nouvel élémentdivet un élément HTML personnaliséoj-chartliés à une série de graphiques à secteurs pour un objet enfant Eléments d'activité.. . . <div id="itemId"> <oj-bind-text value="[['Item Id: ' + itemData().id]]"></oj-bind-text> </div> <div> <oj-chart type="pie" series="[[pieSeriesValue]]" animation-on-display="auto" animation-on-data-change="auto" hover-behavior="dim" legend.position="bottom" class="chartStyle"> </oj-chart> </div> . . .L'élément observable
pieSeriesValueremplit le composant Graphique à secteurs Oracle JET à l'aide d'un tableau de données que vous créez dans l'application viewModel. -
Enregistrez le fichier
dashboard.html.Votre fichier doit ressembler à final-detail-list-dashboard-html.txt.
Tâche 5 : Définition d'observables pour les détails d'article et les composants de graphique à secteurs dans ViewModel
Obtenir un élément de données à partir de l'objet enfant Eléments d'activité et remplir les objets observables pour les composants de vue de liaison de données. Dans la vue, l'attribut value des différents composants Détails de l'article référence le paramètre observable itemData. L'attribut series du composant Graphique à secteurs référence le lien observable pieSeriesValue aux données du graphique à partir du même élément de données.
-
Dans le fichier
dashboard.ts, supprimez le bloc de code qui commence parthis.valet se termine parthis.chartTypesDP. Supprimez également les annotations de type non utilisées pour les variables supprimées. Votre liste d'annotations de type et le début de votre fonctionconstructor()doivent ressembler à l'exemple suivant.class DashboardViewModel { activityDataProvider: MutableArrayDataProvider<Activity["id"], Activity>; itemsArray: Array<Object>; itemsDataProvider: MutableArrayDataProvider<Item["id"], Item>; constructor() { this.activityDataProvider = new MutableArrayDataProvider< Activity["id"], Activity >(JSON.parse(storeData), { keyAttributes: "id", }); . . . -
Ajoutez les annotations de type
itemDataetpieSeriesValueà la classeDashboardViewModel.class DashboardViewModel { activityDataProvider: MutableArrayDataProvider<Activity["id"], Activity>; itemsArray: Array<Object>; itemsDataProvider: MutableArrayDataProvider<Item["id"], Item>; itemData: ko.Observable<any>; pieSeriesValue: ko.ObservableArray; constructor() { . . . -
Après l'instruction
this.itemsDataProvider, définissezitemDataobservable avec une référence au premier objet parent Activité et au premier objet enfant Elément d'activité associé à cette activité dans le document JSON.this.itemsDataProvider = new MutableArrayDataProvider<Item["id"], Item>( itemsArray, { keyAttributes: "id" } ); this.itemData = ko.observable(''); this.itemData(activitiesArray[0].items[0]); } // End of constructor function -
Enfin, sous la déclaration observable
itemData, définissezthis.pieSeriesValuecomme observable.this.itemData = ko.observable(''); this.itemData(activitiesArray[0].items[0]); this.pieSeriesValue = ko.observableArray([]); let pieSeries = [ { name: "Quantity in Stock", items: [this.itemData().quantity_instock] }, { name: "Quantity Shipped", items: [this.itemData().quantity_shipped] } ]; this.pieSeriesValue(pieSeries);
Tâche 6 : afficher les listes maître et détail
-
Revenez au navigateur pour visualiser les modifications apportées à votre application Web.
Dans l'onglet Tableau de bord de votre application Web, les champs de texte, l'avatar et le graphique à secteurs Oracle JET liés aux données sont affichés dans le conteneur Détails de l'élément, mais les listes ne répondent pas aux sélections. Dans le tutoriel suivant, les gestionnaires d'événements que vous créez ajouteront une fonctionnalité de sélection.

Description de l'image formatted_master_detail_items_list.png
-
Fermez la fenêtre ou l'onglet du navigateur qui affiche l'application Web en cours d'exécution.
-
Dans la fenêtre de terminal, appuyez sur Ctrl+C et, si vous y êtes invité, entrez
ypour quitter le traitement batch des outils Oracle JET.
Ressources de formation supplémentaires
Explorez d'autres exercices sur docs.oracle.com/learn ou accédez à davantage de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir Oracle Learning Explorer.
Pour consulter la documentation du produit, consultez le centre d'aide Oracle.
Create the detail view in an Oracle JET web app
F53165-01
February 2022
Copyright © 2022, Oracle and/or its affiliates.