2013-03-26 42 views
1

我正在尝试使用onStateChanged事件为dojox.mobile.Switch小部件创建基本事件处理程序。我正在使用dojo/on事件处理程序模块来处理新的AMD体系结构,并且很难让它听到我的切换事件。Dojo工具包1.8.3移动dojo /处理程序事件开关小部件

这里是使用id =的MobileView

<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代码代码的HTML中开关部件。第二个要求是假设处理切换事件。

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

在旧版本的道场,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

+0

有道理!感谢您的快速回复,代码段和参考链接!这只是我想要的! – Padawan 2013-03-26 18:56:08