Я до сих пор не совсем уверен, в чем проблема, кроме как по какой-то причине dijit.DialogUnderlay
код запутывается.Кстати, этого не происходит в 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 больше не отображается в экземпляре (в любом случае, раньше она была технически закрытой), но onHide
теперь срабатывает после завершения анимации(тогда как раньше он срабатывал, как только начинался).К сожалению, setTimeout необходим, чтобы обойти ошибку, возникающую из-за другого кода в ветви, вызывающего onHide
, который предполагает, что что-то еще существует в экземпляре, чего не будет после того, как мы его уничтожим (см. # 12436).
dlg.connect(dlg, 'onHide', function() {
setTimeout(function() { dlg.destroyRecursive(); }, 0);
});
dlg.hide();
См. Это в действии на JSFiddle: http://jsfiddle.net/3MNRu/1/ (исходную ошибку в вопросе см. в исходной версии ) *