2013-03-26 109 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