顯示或隱藏 Oracle JET Web App 中的內容
簡介
Oracle JET oj-module 元件和 JavaScript 回應式公用程式類別可根據螢幕大小載入不同的檢視。您可以使用 oj-module 元件來取代頁面區域中的內容,方法是將檢視和對應的 viewModel 連結到元素。
目標
完成此教學課程時,您將自訂 Oracle JET Web 應用程式,以使用 Oracle JET oj-module 元件和回應式 TypeScript 程式碼來連結檢視和對應的 viewModel。
必要條件
- 設定使用 JavaScript 程式實際執行、Node.js 及已安裝最新 Oracle JET 命令行介面建立 Oracle JET App 的開發環境
- 存取 Oracle JET Developer Cookbook
- 在此學習路徑中完成上一個教學課程,讓您建立
JET_Web_Application資料夾 - jet_web_application_responsive_design_final.zip 完成的應用程式 (選擇性下載)
作業 1:新增模組元件至檢視
使用組態物件定義 Oracle JET oj-module 元件下的檢視和對應的 viewModel。
-
瀏覽至
JET_Web_Application/src/ts/views目錄,然後在編輯器中開啟dashboard.html檔案。 -
使用
id="activityItemsContainer"尋找div元素。在空的div中,新增將oj-module自訂 HTML 元素帶入定義導覽區域的config屬性的div容器。<div id="activityItemsContainer" class="oj-flex-item oj-md-6 oj-sm-12"> <div id="container"> <oj-module config="[[moduleConfig]]"></oj-module> </div> </div> -
儲存
dashboard.html檔案。您的程式碼可能與 final-dashboard-html.txt 類似。
作業 2:更新 ViewModel 中匯入的模組清單
在 dashboard.ts 檔案的頂端,匯入支援 Oracle JET 元件的模組。
-
瀏覽至
JET_Web_Application/src/ts/viewModels目錄,然後在編輯器中開啟dashboard.ts檔案。 -
在
ojlistview模組之後,新增三個 JET 回應式 HTML 公用程式模組和ojmodule-element模組。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 * as ResponsiveUtils from "ojs/ojresponsiveutils"; import * as ResponsiveKnockoutUtils from "ojs/ojresponsiveknockoututils"; import * as HtmlUtils from "ojs/ojhtmlutils"; import "ojs/ojmodule-element"; -
儲存
dashboard.ts檔案。您的匯入區塊看起來應類似 import-block-ts.txt。
作業 3:在 ViewModel 中新增回應載入的程式碼
您想要在回應式版面配置中載入不同畫面大小的不同內容。您可以使用 oj-module,透過可觀察、媒體查詢或自訂媒體查詢來載入不同的檢視。
-
開啟 Oracle JET Cookbook,然後瀏覽至 Cookbook 首頁。按一下功能表列中的 Framework,然後按一下Responsive Behaviors,再按一下Responsive Load。
-
您可以存取
ResponsiveUtils命名空間的 API 文件。接著捲動至「方法 (Method)」區段,並讀取getFrameworkQuery方法。 -
在
dashboard.ts檔案的chartDataProvider宣告下方,新增內嵌樣板程式碼區塊以傳送至oj-module自訂 HTML 元素。this.chartDataProvider = new MutableArrayDataProvider(this.chartData, { keyAttributes: "id", }); // Define the oj-module inline template for Activity Items list const lg_xl_view = '<h3 id="activityItemsHeader">Activity Items</h3>' + '<oj-list-view style="font-size: 18px" aria-labelledby="activityItemsHeader">' + "<ul>" + "<li>" + '<div class="oj-flex-item">' + "<p>SureCatch Baseball Glove</p>" + "<p>Western R16 Helmet</p>" + "<p>Western C1 Helmet</p>" + "<p>Western Bat</p>" + "</div>" + "</li>" + "<li>" + '<div class="oj-flex-item">' + "<p>Air-Lift Tire Pump</p>" + "<p>Intact Bike Helmet</p>" + "<p>Nimbus Bike Tire</p>" + "<p>Refill Water Bottle</p>" + "<p>Swift Boys 21 Speed</p>" + "</div>" + "</li>" + "</ul>" + "</oj-list-view>";大型畫面與額外大型畫面的內嵌資料節點會透過
lg_xl_view變數傳送。 -
在
lg_xl_view變數的定義下方,定義透過sm_md_view變數傳送中小型和中型畫面之內嵌資料節點的程式碼。// Display this content for small and medium screen sizes const sm_md_view = '<div id="sm_md" style="background-color:lightcyan; padding: 10px; font-size: 10px">' + '<h3 id="activityDetailsHeader">Activity Details</h3>' + '<oj-list-view style="font-size: 18px" aria-labelledby="activityDetailsHeader">' + "<ul>" + "<li>" + '<div class="oj-flex-item">' + "<p>SureCatch Baseball Glove</p>" + "<p>Western R16 Helmet</p>" + "<p>Western C1 Helmet</p>" + "<p>Western Bat</p>" + "</div>" + "</li>" + "</ul>" + "</oj-list-view>" + "</div>"; -
在
sm_md_view變數的定義下方,使用可觀察的this.large媒體查詢來定義載入不同畫面大小檢視的程式碼。// Identify the screen size and display the content for that screen size const lgQuery = ResponsiveUtils.getFrameworkQuery( ResponsiveUtils.FRAMEWORK_QUERY_KEY.LG_UP ); this.large = ResponsiveKnockoutUtils.createMediaQueryObservable(lgQuery); this.moduleConfig = ko.pureComputed(() => { let viewNodes = HtmlUtils.stringToNodeArray( this.large() ? lg_xl_view : sm_md_view ); return { view: viewNodes }; }); /** * End of oj-module code */透過使用 HTML 公用程式函數,您可以在
this.large變數中取得架構媒體查詢字串。如果this.large()中的媒體查詢字串值等於LG_UP(大或以上),則會載入lg_xl_view變數中的 HTML 程式碼。如果this.large()中的媒體查詢字串值不等於LG_UP,則會載入sm_md_view變數中的 HTML 程式碼。 -
將
large和moduleConfig的類型宣告新增至類別。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>; large: ko.Observable<boolean>; moduleConfig: ko.PureComputed<any>; -
儲存
dashboard.ts檔案。您的檔案看起來應類似 final-dashboard-ts.txt。
任務 4:執行 Web 應用程式
-
在終端機視窗中,變更為
JET_Web_Application目錄,然後執行應用程式。$ ojet serveOracle JET 工具會在本機 Web 瀏覽器中執行 Web 應用程式,供您檢視儀表板內容。

若要顯示
sm_md_view變數中的內容,請將螢幕調整為中小或中型大小。請注意「活動明細」標題下項目的縮短清單,該標題會反白標示星號。
若要顯示
lg_xl_view變數中的內容,請將螢幕大小變更為大或額外大。
-
在終端機視窗中,按 Ctrl+C,如果出現提示,請輸入
y以結束 Oracle JET 工具批次工作。 -
關閉瀏覽器視窗或頁籤。
-
您的已完成應用程式具有回應式設計功能,看起來應類似 jet_web_application_responsive_design_final.zip。
作業 5:(選擇性) 從回復的應用程式執行 Web 應用程式
如果您要從提供的程式碼執行完成的 Oracle JET Web 應用程式,可以從下載的存檔檔案還原應用程式。若要使用擷取和壓縮的 Oracle JET 應用程式,您必須在擷取的應用程式內回復專案相依性,包括 Oracle JET 工具和必要的程式庫和模組。
-
下載
jet_web_application_responsive_design_final.zip檔案,並將已完成的應用程式內容解壓縮至jet_web_application_responsive_design_final資料夾。 -
在終端機視窗中,瀏覽至
jet_web_application_responsive_design_final資料夾並回復 Oracle JET Web 應用程式。$ ojet restore -
等待確認。
$ Restore complete應用程式已可執行。
-
在瀏覽器中執行 Web 應用程式並測試。
$ ojet serve -
關閉顯示您執行中 Web App 的瀏覽器視窗或頁籤。
-
在終端機視窗中,按 Ctrl+C,如果出現提示,請輸入
y以結束 Oracle JET 工具批次工作。
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或是存取更多免費學習內容至 Oracle Learning YouTube 通道。此外,瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請瀏覽 Oracle Help Center。
Show or hide content in the Oracle JET web application
F53128-01
February 2022
Copyright © 2022, Oracle and/or its affiliates.