1

onStateChangedイベントを使用して、dojox.mobile.Switchウィジェットの基本的なイベントハンドラーを作成しようとしています。新しいAMDアーキテクチャに関してdojo/onイベントハンドラモジュールを使用していますが、スイッチイベントをリッスンするのに苦労しています。

id=mobileViewのスイッチウィジェットのHTMLは次のとおりです

    <li data-dojo-type="dojox.mobile.ListItem" data-dojo-props="icon:'../../app/images/i-      icon-1.png'">
      Mobile Version
    <div id="mobileView" class="mblItemSwitch" data-dojo-type="dojox.mobile.Switch"></div>
    </li>

これがJSコードコードです。2番目の要件は、スイッチイベントを処理することです。

    require(["dojox/mobile/parser", "dojox/mobile", "dojox/mobile/deviceTheme","dojox/mobile/compat", "dojo/domReady!"],
    function(parser) {
    parser.parse();
    });

    require(["dojo/on", "dijit/dijit"], 
    function(on){
    on(dijit.byId("mobileView"), 
    "onStateChanged", 
    function(newState){
    alert(newState);
    });
    });
    </script>

dijit.byIdを使用してウィジェットにバインドし、イベントonStateChangedをリッスンし、状態が変化したら前の関数を呼び出していることがわかります。正しいモジュールがrequireに含まれていることと関係があると思いますが、よくわかりません。私はこれに何時間も費やし、dojo.connectの古い方法を含む多くの異なる方法を試しました。

ヘルプ/ヒントをいただければ幸いです。

参照:dojo / on Dojo Toolkit dojo / on

4

1 に答える 1

1

古いバージョンのdojoではdojo.connect()、ウィジェットでのDOMイベント(クリック、フォーカスなど)と関数呼び出しの両方を処理していました。

ただし、新しいdojo/onモジュールはDOMイベントを処理し、dojo/aspectモジュールは関数呼び出しを処理します。Switch.onStateChanged()は関数であり、DOMイベントではないため、次のようなものが必要です。

require(["dojo/aspect", "dijit/registry"], function(aspect, registry) {
     aspect.after(registry.byId("mobileView"), "onStateChanged", 
       function(newState){
         alert(newState);
       }
     );
});

詳細については、 http://dojotoolkit.org/reference-guide/1.8/dojo/connect.htmlを参照してください。

于 2013-03-26T18:40:23.267 に答える