1

この記事 ( 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/動作をウィジェットに適用する良い解決策はありますか?

4

1 に答える 1

0

ウィジェットオブジェクトにイベントをフックするのは実際のところのように見えますが、behavior代わりにDOMにアクセスするように設計されています。だから、私はあなたがあなたの回避策で立ち往生していると思います。

于 2012-10-18T01:44:10.113 に答える