我在动画序列中遇到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调用关闭按钮调用的方法?
有人可以帮帮我吗?提前谢谢!
答案 0 :(得分:2)
问题出在您的onShow
方法中。您连接到click事件以隐藏,但永远不会断开它。再次打开对话框时,可以单击click方法再次隐藏对话框。结果是当您尝试第二次关闭对话框时,将调用hide两次。第二次调用隐藏时会抛出错误,因为动画已经被破坏了。
试试这个:
var signal = on(dojo.byId('global_welcomeCancel'), "click", function (evt) {
dojo.stopEvent(evt);
signal.remove();
global_welcome.hide();
});