SAP之FIORI(6)-JsView加载模式
MVC 是Model、View、Controller的简称,用于将程序的数据、界面展示和用户交互分离,通过这种分离,可以简化开发,以及让某部分变动的时候,不需要影响其他部分,从而降低耦合。 Model:代表应用程序的数据(oDataModel、jsonModel) View:代表应用程序的用户界面(xml、js、html、json) Controller:处理应用程序数据和用户交互(js)
模块化 之前的javascript没有模块化的概念,ES6带来了模块化。在sapui5中,模块指的是可以在浏览器中加载和执行的JavaScript文件。
如何加载模块 jQuery.sap.declare()申明一个模块,作用确保模块存在。 jQuery.sap.require()同步加载代码的依赖模块。 sap.ui.define()定义javaScript模块,异步加载依赖(dependancies)模块, sap.ui.define()定义的模块具有全局命名空间。 sap.ui.require()异步加载依赖的模块,不具有全局命名空间。
项目名
JsView
webapp/index.html
demo
//application data
var oModel = new sap.ui.model.json.JSONModel();
oModel.loadData("./model/data.json");
sap.ui.getCore().setModel(oModel);
var oApp = new sap.m.App({
initialPage:"masterView"
});
var oMasterView = sap.ui.jsview("masterView","webapp.view.Master");
var oDetailView = sap.ui.jsview("detailView","webapp.view.Detail");
oApp.addPage(oMasterView);
oApp.addPage(oDetailView);
oApp.placeAt("content");
webapp/view/Master.view.js
sap.ui.jsview("webapp.view.Master", {
getControllerName:function(){
return "webapp.controller.Master";
},
createContent:function(oController){
//定义table的column
var aColumns = [
new sap.m.Column({
header:new sap.m.Text({text:"ID"})
}),
new sap.m.Column({
header:new sap.m.Text({text:"供应商供应商名称"})
})
];
//定义template作为line items
var oTemplate = new sap.m.ColumnListItem({
type:"Navigation",
press:[oController.onListPress,oController],
cells:[
new sap.m.ObjectIdentifier({text:"{ID}"}),
new sap.m.ObjectIdentifier({text:"{Name}"})
]
});
//table的toolbar
var oHeaderToolbar = new sap.m.Toolbar({
content:[
new sap.m.Title({text:"供货商数量:{/CountOfSuppliers}"})
]
});
//table
var oTable = new sap.m.Table({
columns:aColumns,
headerToolbar:oHeaderToolbar
});
oTable.bindItems("/Suppliers",oTemplate);
//master page
var oMasterPage = new sap.m.Page({
title:"js View",
content:[oTable]
});
return oMasterPage;
}
});
webapp/controller/Master.controller.js
sap.ui.define([
"sap/ui/core/mvc/Controller"
], function(Controller) {
"use strict";
return Controller.extend("webapp.controller.Master", {
onListPress:function(oEvent){
var sPageId = "detailView";
oApp.to(sPageId);
var oContext = oEvent.getSource().getBindingContext();
var oDetailPage = oApp.getPage(sPageId);
oDetailPage.setBindingContext(oContext);
}
});
});
webapp/view/Detail.view.js
sap.ui.jsview("webapp.view.Detail", {
getControllerName:function(){
return "webapp.controller.Detail";
},
createContent:function(oController){
var oObjectHeader = new sap.m.ObjectHeader({
title:"{Name}",
number:"ID:{ID}",
attributes:[
new sap.m.ObjectAttribute({
text:"{Address/Street},{Address/City}"
})
]
});
var oDetailPage = new sap.m.Page({
showNavButton:true,
navButtonPress:[oController.onNavPress,oController],
title:"明细",
content:[oObjectHeader]
});
return oDetailPage;
}
});
webapp/controller/Detail.controller.js
sap.ui.define([
"sap/ui/core/mvc/Controller"
], function(Controller) {
"use strict";
return Controller.extend("webapp.controller.Detail", {
onNavPress:function(oEvent){
oApp.back();
}
});
});
webapp/model/data.json
{
"CountOfSuppliers":"2",
"Suppliers":[
{
"ID":"1",
"Name":"CBA篮球",
"Address":{
"Street":"东风10",
"City":"武汉",
"ZipCode":"430056",
"Country":"中国"
}
},
{
"ID":"2",
"Name":"NBA篮球",
"Address":{
"Street":"华尔街",
"City":"纽约",
"ZipCode":"116000",
"Country":"美国"
}
}
]
}
点击