有没有办法在控制器的init()函数内部编写的jQuery语法中调用SAP UI5控制器函数? 我的意思是我在user.controller.js的init()中写了下面的代码片段。我有一个函数checkId()写在同一个控制器里面,我想在下面的代码片段中调用。如何做到这一点? 我的代码:
$(window).load(function(){
$("#myid").mousedown(function(){
this.checkId(); //returns is not a function
});
});
答案 0 :(得分:1)
这与this
关键字在JavaScript中的工作方式密切相关。查看How does the "this" keyword work?了解详情。
您有三种不同的可能性来克服您所面临的问题:
1)别名this
(将其存储到变量中):
var oController = this;
$(window).load(function(){
$("#myid").mousedown(function(){
oController.checkId();
});
});
2)重新绑定内部函数的this
上下文(使用例如.bind
或jQuery.proxy
):
$(window).load(function(){
$("#myid").mousedown(function(){
this.checkId();
}.bind(this));
}.bind(this));
3)使用ES6 arrow functions(如果您没有遇到与浏览器支持相关的问题或者您有转换构建设置):
$(window).load(() => $("#myid").mousedown(() => this.checkId()));
此外,您应该尽可能避免在UI5中手动添加DOM事件处理程序。您只需使用UI5按钮并将方法附加到UI5 press
事件即可。