Ash*_*ley 2 javascript dojo dialog
我有一个扩展dijit.Dialog的类,但只为我的站点设置默认功能和按钮.单击对话框的取消按钮时,将运行以下代码:
this.actionDialog.destroyRecursive();
this.actionDialog.destroy();
Run Code Online (Sandbox Code Playgroud)
NB this.actionDialog = dijit.Dialog
有时(并非总是)会抛出以下错误:
Uncaught TypeError: Cannot call method 'destroy' of undefined
DialogUnderlay.xd.js:8
Run Code Online (Sandbox Code Playgroud)
这导致以下对话框错误显示.我使用的是Google API的1.5.我错过了底衬代码吗?
肯的回答后抛出错误:
exception in animation handler for: onEnd
TypeError: Cannot read property 'style' of null
Run Code Online (Sandbox Code Playgroud)
两者都来自dojo.xd.js:14.但代码仍能正常运行.
我仍然不完全确定问题是什么,除了某些原因dijit.DialogUnderlay代码变得混乱.FWIW,这在Dojo 1.6中不会发生.
当我在寻找一些可能的解决方案时,我似乎意外地发现避免这个问题可能就像hide()在破坏它之前立即调用对话框一样简单,例如:
this.actionDialog.hide();
this.actionDialog.destroyRecursive();
Run Code Online (Sandbox Code Playgroud)
或者,您可能有兴趣隐藏对话框,然后在隐藏动画完成后销毁它.
以下是如何在Dojo 1.5及更早版本(测试1.3+)上执行此操作:
dlg.connect(dlg._fadeOut, 'onEnd', function() {
this.destroyRecursive();
});
dlg.hide();
Run Code Online (Sandbox Code Playgroud)
在1.6中,fadeOut动画不再在实例上公开(被授予,无论如何它在技术上都是私有的),但是onHide现在一旦动画结束就会触发(而在它开始之前就触发它).不幸的是,需要使用setTimeout来解决由于分支调用中的其他代码而发生的错误,该错误onHide假定实例上仍然存在某些东西,在我们销毁之后它们不会出现(参见#12436).
dlg.connect(dlg, 'onHide', function() {
setTimeout(function() { dlg.destroyRecursive(); }, 0);
});
dlg.hide();
Run Code Online (Sandbox Code Playgroud)
在JSFiddle上看到它的实际操作:http://jsfiddle.net/3MNRu/1/ (请参阅问题中原始错误的初始版本)
| 归档时间: |
|
| 查看次数: |
6554 次 |
| 最近记录: |