咱們在作 SAP UI5 開發時,在視圖邏輯沒有開發完畢時,每每不但願鏈接服務器端的 OData 服務進行聯調,而僅僅鏈接本地端的測試數據。javascript
本文介紹若是啓動本地 mock server,將 SAP UI5 項目工程裏提早準備好的測試數據,渲染到 SAP UI5 應用的視圖上。java
本文介紹具體方法。json
sap.ui5 區域裏,定義該應用的根視圖 (rootView)爲 SmartTable:服務器
<mvc:View xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" controllerName="sap.ui.demo.smartControls.SmartTable" xmlns:smartTable="sap.ui.comp.smarttable"> <smartTable:SmartTable id="smartTable_ResponsiveTable" tableType="ResponsiveTable" editable="false" entitySet="Products" header="Products" showRowCount="true" useExportToExcel="false" enableAutoBinding="true"> </smartTable:SmartTable> </mvc:View>
controller 什麼都不用實現:mvc
component.js 也不用實現:函數
主要代碼:測試
sap.ui.getCore().attachInit(function() { sap.ui.require([ "sap/ui/demo/smartControls/test/service/server" ], function(server) { server.init(); new sap.ui.core.ComponentContainer({ name: "sap.ui.demo.smartControls", height: "100%" }).placeAt("content"); }); });
Mock server 的核心邏輯在這個 server.js 裏:ui
使用的是 SAP UI5 提供的標準 Mock server,位於目錄 sap/ui/core/util/MockServer 下面。url
sap.ui.define([ "sap/ui/core/util/MockServer" ], function (MockServer) { "use strict"; return { init: function () { var oMockServer = new MockServer({ rootUri: "/here/goes/your/serviceUrl/" }); MockServer.config({ autoRespond: true, autoRespondAfter: 1000 }); var sPath = jQuery.sap.getModulePath("sap.ui.demo.smartControls.test.service"); oMockServer.simulate(sPath + "/metadata.xml", sPath); oMockServer.attachAfter(sap.ui.core.util.MockServer.HTTPMETHOD.GET, function(oEvent) { var oXhr = oEvent.getParameter("oXhr"); var aResultFiltered = []; var fGetUriParameter = function(sUri, sKey) { var sValue = ""; var aParams = decodeURIComponent(sUri).replace("?", "&").split("&"); aParams.some(function(sPairs) { if (sKey === sPairs.split("=")[0]) { sValue = sPairs.split("=")[1]; return true; } }); return sValue; }; var sSearchText = fGetUriParameter(oXhr.url, "search"); if (sSearchText) { var aResults = oEvent.getParameter("oFilteredData").results; aResults.forEach(function(oEntry) { if (JSON.stringify(oEntry).indexOf(sSearchText) > -1) { aResultFiltered.push(oEntry); } }); oEvent.getParameter("oFilteredData").results = aResultFiltered; } }); oMockServer.start(); } }; });
爲了配合 mock server 工做,本地必須保存一個 metadata.xml:spa
同時將本地測試數據,以 json 文件的形式維護在工程裏:
文件名必須爲 metadata.xml 裏定義的同名 entitySet:
最後本地讀取 mock server 返回的測試數據,應用界面以下:
更多Jerry的原創文章,盡在:"汪子熙":