我使用Dojo创建一个简单的对话框来在系统中创建用户。问题是我得到了错误:
Tried to register widget with `id==user_submit` but that `id` is already registered
user_submit
,是一个Dojo按钮,我必须在对话框中完成表单。当我通过单击并提交表单关闭对话框时,再次打开对话框没有问题(在按钮上的单击事件中,我有这行代码:
dijit.byId("user_submit").destroy();
但如果我通过右上角的[x] -link /按钮关闭对话框,我不会破坏按钮,然后无法重新打开对话框而不重新加载页面。
如何让Dojo破坏按钮或如何重载[X] -link / button上的click事件,这样我就可以为按钮编写destroy命令了?
答案 0 :(得分:15)
"Developer shouldn't override or connect to this method"
代表“onCancel”,请参阅documentation。
更好的解决方案是:
var myDialog = new Dialog({
id: "myDialogId1",
onHide: function() {
myDialog.destroy()
}
});
答案 1 :(得分:7)
找到解决方案。通过使用dojo.connect()。
myDialog.connect(myDialog, "hide", function(e){
dijit.byId("user_submit").destroy();
});
在我发布quistion之后不久会发布这个,但我没有足够的分数,所以这里的答案又来了,有点晚了: - )
答案 2 :(得分:3)
IIRC,当您点击X时,会调用onClose
扩展事件,因此您可以尝试将清理代码放在那里。
你也可以考虑完全回避这个问题。也许您不需要销毁小部件,而是可以重用相同的小部件?您还可以在再次创建小部件存在测试之前执行小部件存在测试,如果它仍然存在则销毁它。
答案 3 :(得分:1)
您可以如上所述覆盖onCancel()
方法,也可以将事件附加到
dijit.dialog.closeButtonNode
domElement。
dijit.dialog.closeButtonNode
是关闭按钮的data-dojo-attach-point
属性的名称。
经验:
dojo.on(dijit.Dialog.closeButtonNode, "click", function(evt){
//add your logic here
});
答案 4 :(得分:-1)
按下对话框顶部的X时,会触发“onCancel”事件。
在那里处理元素。