2015-11-14 87 views
0

在我的sapui5應用程序中有一個對話框,當選擇「是」選項時,用戶被帶到主視圖,但它說我的功能未定義。我是否正確地從對話框中調用了該函數?SAPUI5對話框問題

繼承人我的代碼:

加載主頁視圖功能:

loadHome : function() { 
        this.router = sap.ui.core.UIComponent 
          .getRouterFor(this); 
        this.router.navTo("HomePage"); 
       }, 

我的對話框:

cancelDialog : function() {      
        var oDialog1 = new sap.ui.commons.Dialog(); 
        oDialog1.setTitle("Cancel Case"); 
        var oText = new sap.ui.commons.TextView(
          { 
           text : "Are you sure you want to cancel? Case data will not be saved" 
          }); 
        oDialog1.addContent(oText); 
        oDialog1.addButton(new sap.ui.commons.Button({ 
         text : "Yes", 
         press : function(){ 
          this.loadHome(); 
         }      
        })); 
        oDialog1.addButton(new sap.ui.commons.Button({ 
         text : "No", 
         press : function() { 
          oDialog1.close(); 
         } 
        })); 
        oDialog1.open(); 
       }, 

這些功能都被withing的創建控制器。感謝您的幫助

回答

0

問題是在yes按鈕的事件處理程序中。在這個處理程序中,「this」指向被按下的按鈕而不是控制器。要獲得對控制器的引用,您可以簡單地調用bind(this)。或者,您也可以在處理程序之外存儲對控制器的引用並稍後訪問它(「var that = this;」等等......)==>關閉...

Here是一個工作示例與綁定(本):

//... 
oDialog1.addButton(
    new sap.ui.commons.Button({ 
    text : "Yes", 
    press : function(){ 
     this.loadHome(); 
    }.bind(this)      
    }) 
); 
//... 

而這是其他方法(即=這個......):

//... 
var that = this; 
oDialog1.addButton(
    new sap.ui.commons.Button({ 
    text : "Yes", 
    press : function(){ 
     that.loadHome(); 
    } 
    }) 
); 
//... 

比,你應該考慮使用,而不是SAP sap.m控制其他。 ui.commons。然後也考慮使用片段爲您的對話框,這將使代碼更好地閱讀+更好地重用對話框... Here我已經發布了一個很好的模板,給你和想法。也許你想檢查my other tutorials以及...

+0

非常感謝你的幫助,完美的工作。肯定會檢查你的教程,謝謝 – Ryan232

0

我認爲Nabi的答案已經非常好,清楚。但是,請記住,您可以在受限的案例中通過id獲取Objects。所以例如

var oController = sap.ui.getCore().byId("id2").getController() 

會讓你的控制器的引用與id2視圖。但請不要濫用這種方法,因爲通常只能訪問由此指針提供的有限函數範圍而不是應用程序中的所有對象都是好事。