1

我正在尝试使用 onStateChanged 事件为 dojox.mobile.Switch 小部件创建一个基本事件处理程序。我正在使用针对新 AMD 架构的 dojo/on 事件处理程序模块,并且很难让它监听我的 switch 事件。

这是 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代码代码。第二个要求是假设处理切换事件。

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