2017-10-23 17 views
0

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 
     }  
     } 
    } 
    } 
} 
+0

매니페스트에서 "집"에 대한 경로 항목은을 사용

**//Here I am calling the view var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 

대신

var that = this; 

같은 컨트롤러의 handleClose 함수 내에서 변수에 this 참조를 복사? 이름은 집과 둘 다 집을 사용하고있는 대상이어야합니다. "대상": "집" }, { "이름": "집", "대상": "집" }, – Bernard

+0

주의 사항 -이 변경은 다른 곳의 코드에 영향을 미칠 수 있습니다. ? – Bernard

+0

매니페스트는 다른보기에서 작동하기 때문에 완벽하게 괜찮습니다. – Swappy

답변

0

에 나는 당신의 사용에 대한 모르겠습니다 관련보기

oRouter.navTo("home", {}, true); // set args as appropriate 

내부 기능 this 기능의 범위가 제출합니다. 다음

**//Here I am calling the view 
      var oRouter = sap.ui.core.UIComponent.getRouterFor(that); 
+0

작동했습니다! 고마워요 – Swappy

+0

당신은 천만에요. –

0

var oRouter = this.getOwnerComponent().getRouter(); 

그리고 나서 navigate to (문서 tation 링크) getRouter().getTargets()

+0

이제 Uncaught TypeError : 정의되지 않은 'navTo'속성을 읽을 수 없습니다. – Swappy

+0

라우터를 올바르게 검색하지 않습니다. 사용하지 않는 getRouter()라는 메서드가 있습니다. 어떤 방법을 사용하여 현재 코드에서 라우터를 얻고 있습니까? UIComponent -> https://sapui5.hana.ondemand.com/#/api/sap.ui.core.UIComponent의 api를보십시오 (getRouterFor 메소드가 없습니다). getRouter() 메소드가 있습니다. 라우터에 대한 핸들 (참조)을 올바르게 얻고 있는지 확인하십시오. – Bernard

+0

This.getRouter는 함수가 아닙니다. – Swappy