X上的Dojo对话框关闭事件(右上角)

时间:2012-04-16 11:49:09

标签: javascript button dojo dialog

我使用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命令了?

5 个答案:

答案 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”事件。

在那里处理元素。