6

在 SAPUI5 开发人员指南中,我找到了有关处理事件的说明:

处理 XML 视图中的事件。事件处理程序用作属性。属性名称是事件名称,例如按钮的“按下”,属性值是事件处理程序名称。事件处理程序必须定义为视图控制器中的函数。要在 XML 视图中附加事件处理程序,请插入以下声明: ... ...按下按钮时执行<Button text="Press Me" press="doSomething"/>该方法。controller.doSomething()

在我的 XML 视图中,我可以将其转换为:

<Select change="doSomething">

当 select 的值改变时,controller.selectOnChange函数被调用,«this 参数绑定到控制器本身»。但是,当我在 JavaScript 视图中绑定此事件处理程序时,«this 参数已绑定到选择元素»

我假设这会转化为我的 JavaScript 视图的以下代码:

new sap.m.Select({ change : oController.doSomething })

我是否以错误的方式绑定事件处理程序?

4

2 回答 2

10

在 JS 视图中,当您指定这样的处理程序时:

new sap.m.Button({
    text: "Press Me",
    press: oController.myHandler
})

thenthis绑定到处理程序中的控件本身。

但是还有另一种指定处理程序的方法,如下所示:

new sap.m.Button({
    text: "Press Me",
    press: [oController.myHandler, oController]
})

数组中的第二个元素成为this绑定的元素。

我在sapui5bin 中添加了一个带有 JS 视图和控制器的示例SinglePageExamples

于 2014-02-03T21:31:54.537 回答
3

如果你通过 XML-View 或 HTML-View 调用它,这个 Event-Method 的上下文就是控制器。在 JS-View 中,上下文就是控件本身。这意味着您必须jQuery.proxy()像这样调用它:

new sap.m.Select({ change : jQuery.proxy(oController.doSomething, oController) })

这样,这oController就是您的方法上下文。但我认为,你也可以使用方法addEventDelegate()。有关更多信息,请参阅 SAPUI5-doc:https ://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.core.Element.html#addEventDelegate

于 2014-02-03T18:09:58.130 回答