この記事 ( Using dojo.behavior ) を読み、自分のプロジェクトでビヘイビアモジュールをイベント処理モジュールとして使用したいと考えています。
しかし、DOM ノードの場合はうまく機能するという問題がありますが、どうすれば Dojo ウィジェットで使用できますか?
dojo/on モジュールを使用すると、次のように実行できます。
var buttonNode = dijit.byId("myButton");
on(buttonNode, "onClick", buttonHandler);
また
dijit.byId("myButton").onClick = buttonHandler;
でも、ビヘイビアモジュールを使えば、
behavior.add({
"#myButton": {
onClick: buttonHandler
}
});
うまくいきません。(もちろん、ページのレンダリングを終了した後で、behavior.apply() を呼び出しました。) 以下のコードも機能しません。
behavior.add({
"[widgetid='myButton']": {
onClick: buttonHandler
}
});
調査の結果、上記のコードが機能しない理由は、ボタン ウィジェットが多数の と inner で構成されているためであることがわかりました。そして、data-dojo-id で指定された id を使用すると、イベントがバインドされることを期待する ではなく、 を指します。
この状況から抜け出すことができる解決策を見つけました。
behavior.add({
"[widgetid='myButton'] input": {
onclick: buttonHandler
}
}
ただし、css セレクターは複雑すぎて、ウィジェットのタイプによって異なります。
Dojo/動作をウィジェットに適用する良い解決策はありますか?