Dojo Toolkit 1.8.3移动dojo / on Handler事件切换小部件

时间:2013-03-26 15:55:36

标签: javascript html events mobile dojo

我正在尝试使用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,并在状态更改后调用前面的函数。我认为这与要求中包含正确的模块有关,但我并不确定。我花了好几个小时,并尝试了许多不同的方法,包括旧的dojo.connect方式。

非常感谢任何帮助/提示!

Reference: dojo/on Dojo Toolkit dojo/on

1 个答案:

答案 0 :(得分: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