Javascript 事件本身触发
我不知道为什么这个功能只有在按下按钮的时候才能运行,它是自己运行的 这是我的按钮声明:Javascript 事件本身触发,javascript,sapui5,Javascript,Sapui5,我不知道为什么这个功能只有在按下按钮的时候才能运行,它是自己运行的 这是我的按钮声明: var oButton = new sap.m.Button({ id: "buttonId", text: "Yes", press: this.fnB() }); 我的控制器如下所示: sap.ui.controller("<controller-name>", { fnA: function(){
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”
还没有按下按钮,为什么我会收到hello消息
如果重要的话,我会使用SAP WEB IDE…这:
press: this.fnB()
调用this.fnB并使用其返回值初始化press属性,就像x=foo调用foo并将其返回值分配给x一样
你可能想要
press: this.fnB
或
这样,您就为要按下的函数分配了一个引用,而不是调用它并使用它的返回值
第二个例子可能需要一些解释:如果我们使用
press: this.fnB
这会将函数分配给press,但当它运行时,调用fnB期间的this与上面代码中的this不同,因为在JavaScript中,函数中this的值通常由函数的调用方式决定
使用Functionbind:
…创建一个新函数,当调用该函数时,该函数将使用我们给绑定的值调用原始函数。若要使用SAPUI5中控制器的函数,应使用:
press: [this.fnB, oController]
在这个声明之后,它指的是控制器,而不是我想要按的事件:this.fnB。谢谢在我的特殊情况下,这指的是控制器,所以这里没有问题。但是你的评论还是很有帮助的,我看那是不必要的;
press: this.fnB.bind(this)
press: [this.fnB, oController]