<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我无法替换按钮请帮助我。
答案 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"));
});