SAPUI5对话问题

时间:2015-11-14 09:43:54

标签: sapui5 hana

我在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();
                },

这两个功能都与创建控制器有关。谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

问题出在yes按钮的事件处理程序中。在这个处理程序中,"这个"指向按下的按钮而不是控制器。要获得对控制器的引用,只需调用bind(this)即可。或者,您也可以在处理程序外部存储对控制器的引用并稍后访问它(" var that = this;"依此类推......)==>封...

Here是绑定(this)的一个工作示例:

//...
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.m控件而不是sap.ui.commons。然后还考虑在对话框中使用片段,这会使代码更好地阅读+更好地重用对话框... Here我已经发布了一个很好的模板,可以提供给你和想法。也许你想检查一下my other tutorials ......

答案 1 :(得分:0)

我认为Nabi的答案已经非常清楚了。但是,请记住,您可以在有限数量的情况下通过id获取对象。例如,

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

会通过id2为您提供对视图的控制器的引用。但请不要滥用这种方法,因为通常只能访问this指针给出的有限函数范围而不是应用程序中的所有对象是一件好事。