2012-04-16 77 views
11

使用Dojo创建一个简单的对话框来创建系统中的用户。问题是我得到的错误:X上的Dojo对话框关闭事件(右上)

Tried to register widget with `id==user_submit` but that `id` is already registered 

user_submit,是一个Dojo按钮,我要完成的对话框里面的形式。当我点击它,并提交表单关闭该对话框中有按钮再次打开该对话框(click事件中没有任何问题,我有这行代码:

dijit.byId("user_submit").destroy(); 

但如果我通过关闭对话框右上角的[x] -link /按钮我不会破坏按钮,然后无法重新加载页面时再次打开对话框。

如何获取Dojo以销毁按钮或如何在[X] - 链接/按钮上点击事件超载,所以我可以编写按钮的销毁命令?

回答

7

找到了解决办法。通过使用dojo.connect()。

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

本来postet这之后不久,我张贴的quistion,但我没有足够的积分,所以在这里再次回答,只是有点晚:-)

+0

谢谢!完美工作!对于那些在对话框中有东西的人,不要忘记添加'dijit.byId(“user_submit”)。destroyDescendants();'!!!! – Superdrac 2014-10-16 07:46:42

+1

推荐的销毁方法是'destroyRecursive' – JamieJag 2015-06-11 17:19:37

3

IIRC,onClose扩展事件当你点击X事件时会被调用,所以你可以尝试把清理代码放在那里。


你也可以考虑完全避免这个问题。也许你不需要销毁小部件,而是可以重复使用同一个小部件?您也可以在再次创建它之前做一个小部件存在测试,如果旧版本仍然存在,就会销毁旧版本。

+0

我连接到“隐藏”事件和工作(不久之后,但没有足够的积分,发帖回答这么快我自己的问题)。但的确,在优化剧本时,我会尽你所能。但是由于即时通讯对于Dojo和“项目”必须快速完成,所以我没有时间思考资源管理。 – 2012-04-19 13:08:05

+0

+1重用对话框dijit – jumpnett 2013-09-30 19:24:11

-1

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

在那里处理元素。

+1

“开发者不应该重载或连接到这个方法;它是TooltipDialog和打开它之间的私人通信设备(例如:dijit/form/DropDownButton)” - Dojo API文档https://开头dojotoolkit。org/api /> Dijit> _DialogMixin> onCancel – GavinR 2014-09-04 13:17:01

15

"Developer shouldn't override or connect to this method" for“onCancel”参见documentation。 更好的解决方案是:

var myDialog = new Dialog({ 
    id: "myDialogId1", 
    onHide: function() { 
     myDialog.destroy() 
    } 
}); 
+1

你有链接到你可以与提问人分享的文档吗? – 2014-04-02 12:15:51

+0

http://dojotoolkit.org/api/搜索dijit/Dialog并查看构造函数方法,我们传递params&srcNode – Superdrac 2014-10-16 07:55:32

+1

它不起作用。在dijit/Dialog.js中甚至没有hide()函数。 – peterh 2014-12-04 09:59:09

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 
});