我在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();
},
这两个功能都与创建控制器有关。谢谢你的帮助
答案 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指针给出的有限函数范围而不是应用程序中的所有对象是一件好事。