12

我使用 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 / 按钮上的点击事件,以便我可以为按钮编写销毁命令?

4

5 回答 5

17

"Developer shouldn't override or connect to this method"对于“onCancel”,请参阅文档。更好的解决方案是:

var myDialog = new Dialog({
   id: "myDialogId1",
   onHide: function() {
      myDialog.destroy()
   }
});
于 2014-04-02T11:54:55.873 回答
9

找到了解决方案。通过使用 dojo.connect()。

myDialog.connect(myDialog, "hide", function(e){
    dijit.byId("user_submit").destroy(); 
});

在我发布问题后不久就会发布这个,但我没有足够的分数,所以这里又是答案,只是有点晚了:-)

于 2012-04-19T13:09:03.857 回答
3

IIRC,onClose当您单击 X 事物时会调用扩展事件,因此您可以尝试将清理代码放在那里。


你也可以考虑完全回避这个问题。也许您不需要销毁小部件,而是可以重复使用相同的小部件?您还可以在再次创建它之前进行小部件存在测试,如果旧版本仍然存在,则将其销毁。

于 2012-04-18T20:18:15.517 回答
1

您可以覆盖onCancel()上述方法,也可以将事件附加到 dijit.dialog.closeButtonNodedomElement。 dijit.dialog.closeButtonNodedata-dojo-attach-point关闭按钮的属性名称。

经验:

dojo.on(dijit.Dialog.closeButtonNode, "click", function(evt){
      //add your logic here
});
于 2015-09-03T07:34:01.943 回答
-1

当按下对话框顶部的 X 时,会触发“onCancel”事件。

在那里处理元素。

于 2014-03-11T09:54:45.203 回答