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 でボタンが既に作成されている場合、ボタンを置き換えることができない場合です。助けてください。

4

2 に答える 2

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");
                }
            });
        });
    }
于 2013-02-07T09:09:09.493 に答える
0

私は Dojo 1.7+ よりも Dojo 1.6 に精通していますが、1.6 ではまずレジストリーからウィジェットを削除する必要があります。

したがって、 dojo/dom-constructではなくdijit/registryを使用する必要があると思います。

require(["dojo/dom", "dijit/registry", "dojo/on", "dojo/domReady!"], function(dom, registry, on) {
    registry.remove(dom.byId("buttonNode"));
});
于 2013-02-07T08:28:24.040 に答える