6

SAPUI5 Developers Guide で、イベントの処理に関する次のメモを見つけました。

XML ビューでのイベントの処理。イベント ハンドラーは属性として使用されます。属性名はボタンの「press」などのイベント名で、属性値はイベント ハンドラ名です。イベント ハンドラーは、ビューのコントローラーで関数として定義する必要があります。XML ビューにイベント ハンドラーをアタッチするには、次の宣言を挿入します。 ... <Button text="Press Me" press="doSomething"/>... ボタンが押されると、メソッドcontroller.doSomething()が実行されます。

私の XML ビューでは、これを次のように変換できます。

<Select change="doSomething">

select の値が変更されると、controller.selectOnChange関数が呼び出され、«this 引数がコントローラー自体にバインドされます»。ただし、このイベント ハンドラーを JavaScript ビューにバインドすると、«this 引数は select 要素にバインドされます» .

これは、JavaScript ビューの次のコードに変換されると想定しています。

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

イベント ハンドラーを間違った方法でバインドしていますか?

4

2 に答える 2

10

JS ビューで、次のようにハンドラーを指定すると、次のようになります。

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

次にthis、ハンドラーでコントロール自体にバインドされます。

ただし、次のようにハンドラーを指定する別の方法があります。

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

配列の 2 番目の要素thisがバインド先になります。

JS ビューとコントローラーを使用した例を sapui5bin に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 に答える