gpt4 book ai didi

javascript - dojo dijit.Dialog 破坏底层错误

转载 作者:行者123 更新时间:2023-12-03 23:26:53 24 4
gpt4 key购买 nike

我有一个扩展 dijit.Dialog 的类,但仅为我的站点设置默认功能和按钮。单击对话框的取消按钮时,将运行以下代码:

    this.actionDialog.destroyRecursive();
this.actionDialog.destroy();

nb this.actionDialog = dijit.Dialog

有时(不总是)会抛出以下错误:

Uncaught TypeError: Cannot call method 'destroy' of undefined
DialogUnderlay.xd.js:8

这会导致以下对话框无法正确显示。我正在使用来自 Google API 的 1.5。我是否遗漏了底层代码?

Ken 回答后抛出错误:

exception in animation handler for: onEnd
TypeError: Cannot read property 'style' of null

均来自 dojo.xd.js:14。但是代码仍然可以正常工作。

最佳答案

除了由于某些原因 dijit.DialogUnderlay 代码变得困惑之外,我仍然不完全确定问题出在哪里。 FWIW,这不会发生在 Dojo 1.6 中。

当我在寻找一些潜在的解决方案时,我似乎无意中发现避免这个问题可能就像在销毁对话框之前立即在对话框上调用 hide() 一样简单,例如:

this.actionDialog.hide();
this.actionDialog.destroyRecursive();

或者,您可能有兴趣隐藏对话框,然后在隐藏动画完成后销毁它。

以下是在 Dojo 1.5 及更早版本(已测试 1.3+)上的实现方法:

dlg.connect(dlg._fadeOut, 'onEnd', function() {
this.destroyRecursive();
});
dlg.hide();

在 1.6 中,fadeOut 动画不再暴露在实例上(当然,它在技术上是私有(private)的),但是 onHide 现在会在动画结束时触发(而之前它会在开始了)。不幸的是,需要一个 setTimeout 来解决由于分支中的其他代码调用 onHide 而发生的错误,它假设实例上仍然存在某些东西,但在我们销毁它之后不会存在(请参阅#12436 ).

dlg.connect(dlg, 'onHide', function() {
setTimeout(function() { dlg.destroyRecursive(); }, 0);
});
dlg.hide();

在 JSFiddle 上查看它的运行情况:http://jsfiddle.net/3MNRu/1/ (有关问题中的原始错误,请参阅 the initial version)

关于javascript - dojo dijit.Dialog 破坏底层错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5285758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com