2013-02-07 110 views
1
<script> 

require(["dojo/dom", "dojo/dom-construct", "dojo/on", "dojo/domReady!"], function(dom, domConstruct, on) { 
      domConstruct.empty(dom.byId("buttonNode")); 
     }); 

    var count=1; 
    function change() { 
     if(count == 1) { 
     require(["dojo/ready", "dijit/form/Button", "dojo/dom"], function(ready, Button, dom){ 
     ready(function(){ 
      var myButton = new Button({ 
       label: "Count 1", 
       onClick: function(){ 
        count++; 
        change(); 
       } 
      }, "buttonNode"); 
     }); 
    }); 
     } else if(count ==2) { 
      require(["dojo/ready", "dijit/form/Button", "dojo/dom"], function(ready, Button, dom){ 
       ready(function(){ 
        var myButton = new Button({ 
         label: "Count 2", 
         onClick: function(){ 
          count++; 
          change(); 
         } 
        }, "buttonNode"); 
       }); 
      }); 
     } 
    } 
    </script> 
    </head> 
    <body class="claro" onload="change()"> 
     <button id="buttonNode" type="button" onclick="change()"></button> 
    </body> 
    </html> 

同時點擊按鈕,其表現試圖與ID插件註冊== buttonNode但ID已被註冊,但創造新的之前我正在刪除舊按鈕按鈕使用domConstruct.empty。 我試了兩個domConstruct.empty(「buttonNode」); domConstruct.empty(dom.byId(「buttonNode」));試圖與ID == buttonNode控件註冊,但該ID已被註冊

我想要不同的登錄用戶不同的按鈕,如發送請求,取消請求等,所以我檢查條件並創建新的按鈕。問題是如果按鈕已經創建與該ID我無法替換按鈕,請幫助我。

+0

都沒有涉及這個問題特別,但請你,請重構代碼? –

回答

0

我比1.7+更加熟悉Dojo 1.6,但是在1.6中您肯定需要首先從註冊表中刪除一個小部件。

因此,我認爲你需要使用的dijit /註冊表而不是道場/ DOM的構建

require(["dojo/dom", "dijit/registry", "dojo/on", "dojo/domReady!"], function(dom, registry, on) { 
    registry.remove(dom.byId("buttonNode")); 
}); 
+0

No Will Hawker,試圖註冊id == buttonNode,但該ID已註冊 –

2

我認爲是更好地與已經在註冊表窗口小部件創建不是將其刪除,並重新創建它的工作:

} else if(count ==2) { 
     require(["dojo/ready", "dijit/form/Button", "dojo/dom", "dijit/registry"], function(ready, Button, dom, registry){ 
      ready(function(){ 
       var myButton = registry.byId("buttonNode"); 
       if (myButton) { 
        myButton.setLabel("Count 2"); 
       } else { 
        myButton = new Button({ 
         label: "Count 2", 
         onClick: function(){ 
          count++; 
          change(); 
         } 
        }, "buttonNode"); 
       } 
      }); 
     }); 
    }