尝试使用id == buttonNode注册widget,但该id已经注册

时间:2013-02-07 07:39:53

标签: javascript dojo

    <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我无法替换按钮请帮助我。

2 个答案:

答案 0 :(得分: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");
                }
            });
        });
    }

答案 1 :(得分:0)

我对Dojo 1.6比1.7+更熟悉,但绝对在1.6中你需要先从注册表中删除一个小部件。

因此我认为你需要使用 dijit / registry 而不是 dojo / dom-construct

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