WebIDE生成的代码模板分析
来源:互联网 发布:花店网络营销策划案 编辑:程序博客网 时间:2024/05/14 06:01
前面介绍了如何把代码转移到Eclipse
,本文将对WebIDE生成的master-detail
模板进行代码的分析,让我们看看这些代码有什么作用。目前WebIDE版本为1.7,这个新版本生成的代码已经和1.4有了很大的不同,如果有朋友还工作在老版本的模板,最好升级一下自己的模板吧。
index.html
页面入口文件, 如果需要放到Fiori Launch Pad中,则此文件不会加载,即如果想使用一些第三方的JS代码,并且想运行在Fiori上,在此文件中加载的第三方JS将不会被加载。
主要代码:
* 页面的标题,会显示在浏览器的标签上
<title>template_md</title>
- 加载UI5组件,指定主题,加载sap.m,指定resource目录等。
<script id="sap-ui-bootstrap" src="resources/sap-ui-core.js" data-sap-ui-libs="sap.m" data-sap-ui-theme="sap_bluecrystal" data-sap-ui-xx-bindingSyntax="complex" data-sap-ui-resourceroots='{"ZTMP_MD": "./"}'></script>
- 新建shell,放置在html content部位。
<script> sap.ui.getCore().attachInit(function() { new sap.m.Shell({ app: new sap.ui.core.ComponentContainer({ height : "100%", name : "ZTMP_MD" }) }).placeAt("content"); });</script>
2.Component.js
主要用于route定义,model绑定等等。
jQuery.sap.declare("ZTMP_MD.Component");jQuery.sap.require("ZTMP_MD.MyRouter");sap.ui.core.UIComponent.extend("ZTMP_MD.Component", { metadata : { name : "template_md", version : "1.0", includes : [], dependencies : { libs : ["sap.m", "sap.ui.layout"], components : [] }, rootView : "ZTMP_MD.view.App", config : { resourceBundle : "i18n/messageBundle.properties", serviceConfig : { name: "ZCUSTOMER_SRV", serviceUrl: "/sap/opu/odata/sap/ZCUSTOMER_SRV/" } }, routing : { config : { routerClass : ZTMP_MD.MyRouter, viewType : "XML", viewPath : "ZTMP_MD.view", targetAggregation : "detailPages", clearTarget : false }, routes : [ { pattern : "", name : "main", view : "Master", targetAggregation : "masterPages", targetControl : "idAppControl", subroutes : [ { pattern : "{entity}/:tab:", name : "detail", view : "Detail" } ] }, { name : "catchallMaster", view : "Master", targetAggregation : "masterPages", targetControl : "idAppControl", subroutes : [ { pattern : ":all*:", name : "catchallDetail", view : "NotFound", transition : "show" } ] } ] } }, init : function() { sap.ui.core.UIComponent.prototype.init.apply(this, arguments); var mConfig = this.getMetadata().getConfig(); // Always use absolute paths relative to our own component // (relative paths will fail if running in the Fiori Launchpad) var oRootPath = jQuery.sap.getModulePath("ZTMP_MD"); // Set i18n model var i18nModel = new sap.ui.model.resource.ResourceModel({ bundleUrl : [oRootPath, mConfig.resourceBundle].join("/") }); this.setModel(i18nModel, "i18n"); var sServiceUrl = mConfig.serviceConfig.serviceUrl; //This code is only needed for testing the application when there is no local proxy available var bIsMocked = jQuery.sap.getUriParameters().get("responderOn") === "true"; // Start the mock server for the domain model if (bIsMocked) { this._startMockServer(sServiceUrl); } // Create and set domain model to the component var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, {json: true,loadMetadataAsync: true}); oModel.attachMetadataFailed(function(){ this.getEventBus().publish("Component", "MetadataFailed"); },this); this.setModel(oModel); // Set device model var oDeviceModel = new sap.ui.model.json.JSONModel({ isTouch : sap.ui.Device.support.touch, isNoTouch : !sap.ui.Device.support.touch, isPhone : sap.ui.Device.system.phone, isNoPhone : !sap.ui.Device.system.phone, listMode : sap.ui.Device.system.phone ? "None" : "SingleSelectMaster", listItemType : sap.ui.Device.system.phone ? "Active" : "Inactive" }); oDeviceModel.setDefaultBindingMode("OneWay"); this.setModel(oDeviceModel, "device"); this.getRouter().initialize(); }, _startMockServer : function (sServiceUrl) { jQuery.sap.require("sap.ui.core.util.MockServer"); var oMockServer = new sap.ui.core.util.MockServer({ rootUri: sServiceUrl }); var iDelay = +(jQuery.sap.getUriParameters().get("responderDelay") || 0); sap.ui.core.util.MockServer.config({ autoRespondAfter : iDelay }); oMockServer.simulate("model/metadata.xml", "model/"); oMockServer.start(); sap.m.MessageToast.show("Running in demo mode with mock data.", { duration: 4000 }); }, getEventBus : function () { return sap.ui.getCore().getEventBus(); }});
3.MyRouter.js
页面之间navigate调用。
jQuery.sap.require("sap.m.routing.RouteMatchedHandler");jQuery.sap.require("sap.ui.core.routing.Router");jQuery.sap.declare("ZTMP_MD.MyRouter");sap.ui.core.routing.Router.extend("ZTMP_MD.MyRouter", { constructor : function() { sap.ui.core.routing.Router.apply(this, arguments); this._oRouteMatchedHandler = new sap.m.routing.RouteMatchedHandler(this); }, myNavBack : function(sRoute, mData) { var oHistory = sap.ui.core.routing.History.getInstance(); var sPreviousHash = oHistory.getPreviousHash(); //The history contains a previous entry if (sPreviousHash !== undefined) { window.history.go(-1); } else { var bReplace = true; // otherwise we go backwards with a forward history this.navTo(sRoute, mData, bReplace); } }, /** * Changes the view without changing the hash. * * @param {object} oOptions must have the following properties * <ul> * <li> currentView : the view you start the navigation from.</li> * <li> targetViewName : the fully qualified name of the view you want to navigate to.</li> * <li> targetViewType : the viewtype eg: XML</li> * <li> isMaster : default is false, true if the view should be put in the master</li> * <li> transition : default is "show" the navigation transition</li> * <li> data : the data passed to the navContainers life cycle events</li> * </ul> * @public */ myNavToWithoutHash : function (oOptions) { var oSplitApp = this._findSplitApp(oOptions.currentView); // Load view, add it to the page aggregation, and navigate to it var oView = this.getView(oOptions.targetViewName, oOptions.targetViewType); oSplitApp.addPage(oView, oOptions.isMaster); oSplitApp.to(oView.getId(), oOptions.transition || "show", oOptions.data); }, backWithoutHash : function (oCurrentView, bIsMaster) { var sBackMethod = bIsMaster ? "backMaster" : "backDetail"; this._findSplitApp(oCurrentView)[sBackMethod](); }, destroy : function() { sap.ui.core.routing.Router.prototype.destroy.apply(this, arguments); this._oRouteMatchedHandler.destroy(); }, _findSplitApp : function(oControl) { var sAncestorControlName = "idAppControl"; if (oControl instanceof sap.ui.core.mvc.View && oControl.byId(sAncestorControlName)) { return oControl.byId(sAncestorControlName); } return oControl.getParent() ? this._findSplitApp(oControl.getParent(), sAncestorControlName) : null; }});
4. model
放置model的metadata信息。
5. view
主要工作区域,定义view以及controller,可以看到,在这个master detail模板中,App view用于定义split container,master view定义list显示的内容,detail用于显示master list中选中的记录的详细信息。NotFound view用于显示错误的链接信息。
6. i18n
用于globalization,翻译工作在此进行。
7. css
如果需要使用到自定义的css,则在此处定义,在index或者view中加载。
SAP一直在更新WebIDE的版本,所以,这些Template会随之更新。
阅读全文
0 0
- WebIDE生成的代码模板分析
- Eclipse开发UI5 – 使用WebIDE生成的代码模板
- WebIDE
- XRCed生成的代码分析
- NetTier模板生成的代码框架用法
- NetTier模板生成的代码框架用法
- Unity修改自动生成的代码模板
- 一维高斯模板的生成代码matlab
- C#分析数据库结构,使用XSL模板自动生成代码
- C#分析数据库结构,使用XSL模板自动生成代码
- C#分析数据库结构,使用XSL模板自动生成代码
- C#分析数据库结构,使用XSL模板自动生成代码
- C#分析数据库结构,使用XSL模板自动生成代码
- HotSpot模板解释器目标代码生成过程源码分析
- Hibernate代码生成模板
- velocity 代码模板生成
- freemark模板生成代码
- 从模板生成代码
- 在win10下Anaconda+Tensorflow+pycharm配置
- 别让你的缓存形同虚设,轻松搞定缓存击穿
- 虚拟机CentOS的NAT模式联网和SecureCRT远程登录管理工具
- python 流程控制语句结构汇总
- Matlab使用各种tips
- WebIDE生成的代码模板分析
- Mtbatis关系-一对多关系
- SpringMVC @RequestBody Date类型的Json转换
- PLSQL编程入门
- could not open `C:\Program Files (x86)\Java\jdk1.8.0_144\jre\lib\i386\jvm.cfg
- HTML5 移动端 适配问题
- Unity调用Object-c,XUPorter的使用
- java基础系列(一)
- 前台向后台传中文数据出现乱码