Reputation: 111
I am extending an fiori app and have replaced a view and placed a popup. Now my requirement is when I click the close button in the popup I want to open an xmlview.
code.
sap.m.MessageBox.error( "Error Message - some error",
{ icon: sap.m.MessageBox.Icon.ERROR, title: "Confirmation Error", onClose: function (oAction) {
this.router = sap.ui.core.UIComponent.getRouterFor(this);
this.router.navTo("customview"); } } );
can some one pls advise on the error I am getting.
'navTo' of undefined
manifest.json
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "publicservices.her.myApp.myAppExtension.view",
"controlId": "app",
"controlAggregation": "pages",
"async": true
},
"routes": [{
"pattern": "",
"name": "customView",
"target": "customView"
}
],
"targets": {
"customView": {
"viewName": "customView",
"viewId": "customView"
}
}
}
}
Upvotes: 0
Views: 1328
Reputation: 1145
There are a few things I want you to check in your project in order for your router to be defined. I added an example below.
Hope this helps.
Component
init: function() {
UIComponent.prototype.init.apply(this, arguments);
this.setModel(models.createDeviceModel(), "device");
// MAKE SURE YOUR ROUTER IS INITIALISED HERE
this.getRouter().initialize();
}
Manifest 1
Make sure you add a controlId and controlAggregations
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "Test.view",
"controlId": "app",
"controlAggregation": "pages"
},
Manifest 2
"routes": [{
"pattern": "",
"name": "main",
"target": "main"
}, {
"pattern": "side",
"name": "side", // YOU'LL USE THIS NAME TO NAVIGATE IN THE CONTROLLER
"target": "side"
}],
"targets": {
"main": {
"viewName": "Main"
},
"side": {
"viewName": "Side" // ENSURE THIS IS CORRECT (this refers to view: 'Side.view.xml')
}
}
View
<App id="app"> <!-- ADD THIS ID TO ALL VIEWS -->
<pages> <!-- SHOULD HAVE THE SAME VALUE AS CONTROLID IN THE MANIFEST-->
<Page title="Page 1">
<content>
<Button press="onOpenMessageBox" text="Open" />
</content>
</Page>
</pages>
</App>
Controller
Navigate to route with the name "side"
onOpenMessageBox: function() {
var that = this; // SET VARIABLE THAT TO THIS
sap.m.MessageBox.error("Error Message - some error", {
icon: sap.m.MessageBox.Icon.ERROR,
title: "Confirmation Error",
onClose: function(oAction) {
// CHANGE ALL 'this' TO 'THAT'
// THIS HAS ANOTHER CONTEXT IN THIS FUNCTION
that.oRouter = sap.ui.core.UIComponent.getRouterFor(that);
that.oRouter.navTo("side");
}
});
}
Upvotes: 1