Routing in Split Application
Here, we will implement routing in a Split screen application. The scenario
is, there would be 3 Pages, one is the master Page and other two are the detail
Pages and we will show navigation to one detail page to another through the
click of a list Item on the first detail page.
Follow these simple steps:
1.
Create a SAPUI5 Project, name it accordingly.
Here, I have named it as Splitapp_routing
Create 4 views and controllers.
·
App.view.js and App.controller.js
·
masterpage.view.js and
masterpage.controller.js.
·
detailpage.view.js and detailpage.controller.js
·
detailpage1.view.js and
detailpage1.controller.js
I have defined routes in the Component.js
this time unlike my last post, where I have defined the routes in index.html.
Index.html
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible"
content="IE=edge">
<meta http-equiv='Content-Type'
content='text/html;charset=UTF-8' />
<script src="resources/sap-ui-core.js"
id="sap-ui-bootstrap"
data-sap-ui-libs="sap.m" data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-xx-bindingSyntax="Complex"
data-sap-ui-resourceroots='{
"com.Spiltapp_routing":"./"
}'
data-sap-ui-preload='async'>
</script>
<!-- only load the mobile lib
"sap.m" and the "sap_bluecrystal" theme -->
<script>
sap.ui.getCore().attachInit(function (){
new sap.m.Shell("Shell",{
title:"Routing",
app:
new
sap.ui.core.ComponentContainer({
name
: 'com.Spiltapp_routing'
})
}).placeAt("content");
})
</script>
</head>
<body class="sapUiBody"
role="application">
<div id="content"></div>
</body>
</html>
App.view,js
sap.ui.jsview("com.Spiltapp_routing.spiltapp_routing.App", {
/** Specifies the Controller belonging to this View.
* In the case that it is not implemented, or that "null" is returned, this View does not have a Controller.
* @memberOf spiltapp_routing.App
*/
getControllerName
: function() {
return "com.Spiltapp_routing.spiltapp_routing.App";
},
/** Is initially called once after the Controller has been instantiated. It is the place where the UI is constructed.
* Since the Controller is given to this method, its event handlers can be attached right away.
* @memberOf spiltapp_routing.App
*/
createContent
: function(oController) {
this.setDisplayBlock(true);
this.oApp = new sap.m.SplitApp("SplitApp",{});
return this.oApp;
}
});
masterpage.view.js
sap.ui.jsview("com.Spiltapp_routing.spiltapp_routing.masterpage", {
getControllerName
: function() {
return "com.Spiltapp_routing.spiltapp_routing.masterpage";
},
createContent
: function(oController) {
var list = new sap.m.List("lists", {
items
: {
path
: "/Product",
template
: new
sap.m.ObjectListItem("abc", {
title
: "{Product
Name}",
number
: "{Price}",
intro
: "{Plant}",
icon
: "{image}",
type
: "Active",
attributes
: [ {
text
: "{Product
ID}"
},
{
text
: "{value}"
}
],
firstStatus
: {
text
: "{Status}"
},
press
: function(oEvent) {
oController.itempressed();
}})
}
});
return new sap.m.Page({
title:
"default
Master",
content:
[
list
]
});
}});
masterpage.controller.js
onInit: function() {
var model1 = new
sap.ui.model.json.JSONModel();
model1.loadData("model/detail.json");
sap.ui.getCore().setModel(model1);
},
itempressed: function(oEvent) {
debugger;
// Get instance of router
router =
sap.ui.core.routing.Router.getRouter("appRouter");
router.navTo("detailpage");
}
Detailpage.view.js
sap.ui.jsview("com.Spiltapp_routing.spiltapp_routing.detailpage", {
getControllerName
: function() {
return "com.Spiltapp_routing.spiltapp_routing.detailpage";
},
createContent
: function(oController) {
var list = new sap.m.List({
items
: {
path
: "/Product",
template
: new
sap.m.ObjectListItem({
title
: "{Product
Name}",
number
: "{Price}",
intro
: "{Plant}",
icon
: "{image}",
type
: "Active",
attributes
: [ {
text
: "{Product
ID}"
},
{
text
: "{value}"
}
],
firstStatus
: {
text
: "{Status}"
},
press
: function() {
var oRouter =
sap.ui.core.routing.Router
.getRouter("appRouter");
oRouter.navTo("detailpage1");
}
})
}
});
return new sap.m.Page({
title:
"Default
Detail",
content:
[
list
]
});
}
});
detailpage.controller.js
onInit: function() {
var model1 = new
sap.ui.model.json.JSONModel();
model1.loadData("model/detail.json");
sap.ui.getCore().setModel(model1);
},
detailpage1.view.js
sap.ui.jsview("com.Spiltapp_routing.spiltapp_routing.detailpage1", {
getControllerName
: function() {
return "com.Spiltapp_routing.spiltapp_routing.detailpage1";
},
createContent
: function(oController) {
return new sap.m.Page({
title:
"2nd
detailpage",
showNavButton:
true,
navButtonTap:function(){
var oRouter = sap.ui.core.routing.Router.getRouter("appRouter");
window.history.go(-1);
},
content:
[
]
});
}
});
detail.json
{
"Product": [
{ "image":
"model/bag.jpg",
"Product ID": "123",
"Price": "321",
"Product Name": "Bag",
"value":"10",
"Plant":"bags limited",
"Status":"available"
},
{"image": "model/watch.png",
"Product ID": "124",
"Price": "322",
"Product Name":"watch",
"value":"7",
"Plant":"watch limited",
"Status":"unavailable"
},
{"image": "model/pen.png",
"Product ID": "125",
"Price": "323",
"Product Name":
"Pen",
"value":"50",
"Plant":"pen limited",
"Status":"available"
},
{"image": "model/laptop.png",
"Product ID": "126",
"Price": "324",
"Product Name": "Laptop",
"value":"15",
"Plant":"laptop
limited",
"Status":"available"
},
{
"image": "model/pencil.png",
"Product ID": "127",
"Price": "325",
"Product Name": "pencil",
"value":"10",
"Plant":"pencil limited",
"Status":"unavailable"
},
{
"image": "model/bulb.png",
"Product ID": "128",
"Price": "326",
"Product Name": "bulb",
"value":"10",
"Plant":"bulb limited",
"Status":"available"
}
]
}
Here, in the Json, I have used many .png
and .jpg images, you can use your own images.
Output
Hope, it helped. Do comment in the comment section
if you liked this tutorial.
Thanks!!!
1 comments:
Click here for commentsMissing Component.js file content.
ConversionConversion EmoticonEmoticon