我不知道为什么只有按下按钮时才能运行的功能。
这是我的按钮声明:
var oButton = new sap.m.Button({
id: "buttonId",
text: "Yes",
press: this.fnB()
});
我的控制器如下所示:
sap.ui.controller("<controller-name>", {
fnA: function(){<button_declaration_here>},
fnB: function(){console.log("Hello from fnB!");}
});
当我运行应用程序时,我得到:
你好fnB!
未捕获的TypeError:无法读取未定义的属性“0”
还没有按下按钮,为什么我会收到问候消息?
如果重要的话我使用SAP WEB IDE ......
答案 0 :(得分:8)
此:
press: this.fnB()
调用 this.fnB()
并使用其返回值初始化press
属性,与x = foo()
调用的方式完全相同 {{1并将其返回值分配给foo
。
你可能想要
x
或
press: this.fnB
这样你就可以将函数的引用分配给press: this.fnB.bind(this)
,而不是调用它并使用它的返回值。
第二个例子可能需要一些解释:如果我们只使用
press
会将该功能分配给press: this.fnB
,但在运行时,press
在调用this
期间与fnB
中的this
不同上面的代码,因为在JavaScript中,函数中this
的值通常取决于函数的调用方式。
使用Function#bind
:
press: this.fnB.bind(this)
...创建一个 new 函数,在调用时,将使用我们提供给this
的{{1}}值来调用原始函数。
答案 1 :(得分:1)
如果要在SAPUI5中使用控制器中的功能,则应使用:
press: [this.fnB, oController]
此声明后this
指的是控制器而不是事件