我在动画序列期间遇到 Dojo Dijit Dialog .hide() 方法的问题。我正在使用带有 Tundra 主题的 Dojo 1.7。我的对话框中有一个取消按钮可以关闭对话框。
var global_welcome = new Dialog({
id: 'global_welcome',
style: "width: 750px",
draggable: false,
content: '<button type="button" id="global_welcomeCancel"> Cancel </button>',
onShow : function () {
on(dojo.byId('global_welcomeCancel'), "click", function (evt) {
dojo.stopEvent(evt);
global_welcome.hide();
});
});
}
});
这会在 Firebug 上产生以下错误:
exception in animation handler for: onEnd fx.js (line 152)
TypeError: this._fadeOutDeferred is undefined
this._fadeOutDeferred.callback(true);
以前对此错误的答案,但使用 destroyRecursive 而不是 hide 表明它与动画完成之前对话框被销毁有关。我尝试使用 dojo.hitch() 和 setTimeOut 但这似乎不起作用。另外令人费解的是,我第一次使用 global_welcome.show() (由另一个按钮调用)打开此对话框,然后按取消按钮,它工作时没有错误。第二次及之后,它会产生上述错误消息。此外,右上角 dojo 对话框的默认关闭按钮永远不会导致此错误。也许我可以让 onShow 调用关闭按钮调用的方法?
有人可以帮我吗?提前致谢!
问题出在你的onShow
方法。您连接到要隐藏的单击事件,但永远不要断开它。当您再次打开对话框时,您可以连接 click 方法以再次隐藏对话框。结果是当您第二次尝试关闭对话框时, hide 将被调用两次。第二次调用 hide 时会引发该错误,因为动画已被销毁。
尝试这个:
var signal = on(dojo.byId('global_welcomeCancel'), "click", function (evt) {
dojo.stopEvent(evt);
signal.remove();
global_welcome.hide();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)