在SAP UI5开发人员指南中,我找到了关于处理事件的说明:
1.6.2.5处理XML视图中的事件事件处理程序用作属性 . 属性名称是事件名称,例如“按”表示>按钮,属性值表示事件处理程序名称 . 必须将事件处理程序定义为视图控制器中的函数 . 要在XML视图中附加事件处理程序,请插入以下声明:... ...按下按钮时执行方法controller.doSomething() .
在我的XML视图中,我可以将其转换为:
<Select change="doSomething">
当Select的值更改时,将调用 controller.selectOnChange 函数,并将此参数绑定到控制器本身 . 但是,当我在JavaScript视图中绑定此事件处理程序时,此参数将绑定到Select元素 .
我假设这转换为我的JavaScript视图的以下代码:
new sap.m.Select({ change : oController.doSomething })
我以错误的方式绑定事件处理程序吗?
2 回答
在JS视图中,当您指定这样的处理程序时:
然后
this
绑定到处理程序中的控件本身 .但是还有另一种指定处理程序的方法,如下所示:
数组中的第二个元素成为
this
绑定的内容 .我添加了an example with a JS view and controller to sapui5bin's SinglePageExamples .
如果通过XML-View或HTML-View调用它,则此Event-Method的上下文是控制器 . 在JS-View中,上下文是控件本身 . 这意味着您必须使用jQuery.proxy()调用它:
这样oController就是你的方法上下文 .
但我认为您也可以使用方法addEventDelegate()查看SAPUI5-doc以获取更多信息:https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.core.Element.html#addEventDelegate