2017-10-23 11 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参照をコピーしますか?あなたが両方のために家を使用しているので、名前は家だけでなくターゲットにする必要があります。 "target": "home" }、{"name": "home"、 "target": "home" }、 – Bernard

+0

注意:これは他の場所でコードに影響する可能性があります? – Bernard

+0

マニフェストは他のビューでも機能しているので完全に問題ありません。 – Swappy

答えて

0

のためのあなたの使用状況について確認していません。その後、

**//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リンク)関連ビュー

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

私は内部の機能thisは、関数のスコープを持って提出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.getOwnerComponentは関数ではありません – Swappy

関連する問題