首页 文章

在Javascript视图中纠正事件绑定?与XML视图绑定不同

提问于
浏览
5

在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 回答

  • 7

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

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

    然后 this 绑定到处理程序中的控件本身 .

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

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

    数组中的第二个元素成为 this 绑定的内容 .

    我添加了an example with a JS view and controller to sapui5bin's SinglePageExamples .

  • 2

    如果通过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

相关问题