天天看點

一種簡單地實作 SAP UI5 Master detail 頁面的方法

實作效果如下圖所示:

一種簡單地實作 SAP UI5 Master detail 頁面的方法
app view 的實作代碼:

// @ts-nocheck
sap.ui.jsview("jerrylist.view.App", {
    getControllerName: function () {
  return "jerrylist.view.App";
    },
    createContent: function (oController) {
 
  // to avoid scroll bars on desktop the root view must be set to block display
  this.setDisplayBlock(true);
 
  this.app = new sap.m.SplitApp();
 
  // load the master page
  var master = sap.ui.xmlview("Master", "jerrylist.view.Master");
  master.getController().nav = this.getController();
  this.app.addPage(master, true);
 
  // load the empty page
  var empty = sap.ui.xmlview("Empty", "jerrylist.view.Empty");
  this.app.addPage(empty, false);
 
  return this.app;
    }
});      

代碼第 13 行建立的 sap.m.SplitApp, 實際上是 SplitContainer:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

這個 addPage 方法内部,分别調用 addMasterPage 或者 addDetailPage:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

此時 detail 頁面是空的:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

Master List 點選事件,注冊在 Master.view.xml 裡:handleListSelect

一種簡單地實作 SAP UI5 Master detail 頁面的方法

點選之後,從 event 事件對象裡,獲得 binding context:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

通過 path 能拿到具體的模型資料:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

使用 this.nav.to(“Detail”, context) 跳轉到 detail 頁面:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

Master view controller 的 nav 屬性,在 View controller 裡被指派:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

在 to 實作裡:動态建立一個新的 id 為 Detail 的視圖,然後調用 splitContainer.addPage, 将其加到 Split App 裡:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

調用 app.to 方法,顯示頁面:

一種簡單地實作 SAP UI5 Master detail 頁面的方法

SplitApp to 方法的注釋:

一種簡單地實作 SAP UI5 Master detail 頁面的方法
/**
  * Navigates to the given page inside the SplitContainer.
  * The navigation is done inside the master area if the page has been added,
  * otherwise, it tries to do the page navigation in the detail area.
  *
  * @param {string} sPageId
  *         The screen to which we are navigating to. The ID or the control itself can be given.
     * @param {string} [transitionName=slide]
     *         The type of the transition/animation to apply. Options are "slide" (horizontal movement from the right), "baseSlide", "fade", "flip", and "show"
  *         and the names of any registered custom transitions.
  *
  *         None of the standard transitions is currently making use of any given transition parameters.
  * @param {object} oData
  *         This optional object can carry any payload data which should be made available to the target page. The BeforeShow event on the target page will contain this data object as data property.
  *
  *         Use case: in scenarios where the entity triggering the navigation can or should not directly initialize the target page, it can fill this object and the target page itself (or a listener on it) can take over the initialization, using the given data.
  *
  *         When the transitionParameters object is used, this "data" object must also be given (either as object or as null) in order to have a proper parameter order.
  * @param {object} oTransitionParameters
  *         This optional object can contain additional information for the transition function, like the DOM element which triggered the transition or the desired transition duration.
  *
  *         For a proper parameter order, the "data" parameter must be given when the transitionParameters parameter is used (it can be given as "null").
  *
  *         NOTE: It depends on the transition function how the object should be structured and which parameters are actually used to influence the transition.
  *         The "show", "slide" and "fade" transitions do not use any parameter.
  * @type this
  * @public
  * @since 1.10.0
  * @ui5-metamodel This method also will be described in the UI5 (legacy) designtime metamodel
  */      

繼續閱讀