DescriptionWithBooking View에있는 대화 상자에서 제출 버튼을 클릭하면 View : DescriptionWithBooking이 열려 다른보기 (EmailTicket)를 열려고합니다. 그러나 다음과 같은 오류가 표시됩니다. "읽을 수 없습니다 정의되지 않은 "getTargets '속성.SAPUI5에서 다이얼로그에서 다이얼로그로 이동
대화 상자가 포함 된보기 : DescriptionWithBooking.controller.js :
sap.ui.define([
'sap/m/Button',
'sap/m/Dialog',
'jquery.sap.global',
'sap/m/Label',
'sap/ui/layout/HorizontalLayout',
'sap/ui/layout/VerticalLayout',
'sap/m/Text',
'sap/m/TextArea',
'sap/m/MessageToast',
'sap/ui/core/Fragment',
'sap/ui/core/mvc/Controller',
'sap/ui/model/Filter',
'sap/ui/model/json/JSONModel',
"sap/ui/core/routing/History"
], function(Button, Dialog,jQuery,Label, HorizontalLayout, VerticalLayout,Text, TextArea, MessageToast, Fragment, Controller, Filter, JSONModel,History) {
"use strict";
var CController = Controller.extend("Movie.controller.DescriptionWithBooking", {
onInit : function() {
// set explored app's demo model on this sample
var oModel = new JSONModel(jQuery.sap.getModulePath("sap.ui.demo.mock", "/products.json"));
this.getView().setModel(oModel);
},
onExit : function() {
if (this._oDialog) {
this._oDialog.destroy();
}
},
getRouter : function() {
return sap.ui.core.UIComponent.getRouterFor(this);
},
handleSelectDialogPress: function (oEvent) {
if (!this._oDialog) {
this._oDialog = sap.ui.xmlfragment("Movie.view.Dialog", this);
this._oDialog.setModel(this.getView().getModel());
}
// Multi-select if required
var bMultiSelect = !!oEvent.getSource().data("multi");
this._oDialog.setMultiSelect(bMultiSelect);
// Remember selections if required
var bRemember = !!oEvent.getSource().data("remember");
this._oDialog.setRememberSelections(bRemember);
// clear the old search filter
this._oDialog.getBinding("items").filter([]);
// toggle compact style
jQuery.sap.syncStyleClass("sapUiSizeCompact", this.getView(), this._oDialog);
this._oDialog.open();
},
handleSearch: function(oEvent) {
var sValue = oEvent.getParameter("value");
var oFilter = new Filter("Name", sap.ui.model.FilterOperator.Contains, sValue);
var oBinding = oEvent.getSource().getBinding("items");
oBinding.filter([oFilter]);
},
handleClose: function() {
var dialog = new Dialog({
title: 'Confirm',
type: 'Message',
content: [
new Label({ text: 'Want to add more other people else continue ?', labelFor: 'submitDialogTextarea'}),
new sap.ui.commons.TextArea('submitDialogTextarea', {
liveChange: function(oEvent) {
var sText = oEvent.getParameter('value');
var parent = oEvent.getSource().getParent();
parent.getBeginButton().setEnabled(sText.length > 0);
},
width: '100%',
height: '100%',
placeholder: 'Any other person for movie. ex: Swapnil Garg : Friend'
})
],
beginButton: new Button({
text: 'Submit',
enabled: true,
press: function() {
**//Here I am calling the view
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.getTargets().display("email",{
fromTarget : "book"
});
dialog.close();**
}
}),
endButton: new Button({
text: 'Cancel',
press: function() {
dialog.close();
}
}),
afterClose: function() {
dialog.destroy();
}
});
dialog.open();
},
onBack: function() {
var oHistory, sPreviousHash;
oHistory = History.getInstance();
sPreviousHash = oHistory.getPreviousHash();
if (sPreviousHash !== undefined) {
window.history.go(-1);
} else {
this.getRouter().getTargets().display("home" ,{
fromTarget : "book"
});
}
}
});
return CController;
});
의 manifest.json을 :
나는 (당신이 같은) 당신이 라우터를 얻을해야한다고 생각 당신의handleClose
에서
"routes": [
{
"name": "apphome",
"target": "home"
},
{
"name": "bookmovie",
"target": "book"
},
{
"name": "emailticket",
"target":"email"
}
],
"targets": {
"home": {
"viewName": "View1",
"viewLevel" : 1
},
"book": {
"viewPath": "Movie.view",
"viewName": "DescriptionWithBooking",
"viewLevel" : 2
},
"email": {
"viewPath": "Movie.view",
"viewName": "EmailTicket",
"viewLevel" : 3
}
}
}
}
}
매니페스트에서 "집"에 대한 경로 항목은을 사용
대신
같은 컨트롤러의
handleClose
함수 내에서 변수에this
참조를 복사? 이름은 집과 둘 다 집을 사용하고있는 대상이어야합니다. "대상": "집" }, { "이름": "집", "대상": "집" }, – Bernard주의 사항 -이 변경은 다른 곳의 코드에 영향을 미칠 수 있습니다. ? – Bernard
매니페스트는 다른보기에서 작동하기 때문에 완벽하게 괜찮습니다. – Swappy