单击右上角的关闭(x)按钮后,DOJO对话框不会再次打开

时间:2013-03-13 09:29:03

标签: javascript html jsp dojo

我的页面中有一个名为EDIT的对话框按钮。

首次单击“编辑”按钮时,将出现“编辑”弹出窗口。当我通过单击弹出窗口右上角的关闭(x)按钮关闭弹出窗口并再次单击再次单击编辑按钮时,弹出窗口不会出现(打开)。但是,在同一个“编辑”弹出窗口中单击位于下方的“取消”和“应用”按钮并再次单击“编辑”后,将打开弹出窗口。因此,单击关闭按钮后出现问题,该按钮不允许我再次打开EDIT窗口。

更新:

我发现代码(如下所示)不允许我第二次打开“编辑”对话框并对其进行了评论。但是注释代码会导致另一个问题,即当我点击“取消”或“应用”按钮时,它会抛出以下错误,并且不允许我通过抛出相同的错误再次打开“编辑”按钮。

3 个答案:

答案 0 :(得分:0)

您正在关闭(destroyOnClose : true)的小部件,因此在第二次尝试时无法打开。

/*
 * Overload the _destroyOrHide method in rmt.NewModalPopup so 
 * that the popup will be destroyed instead of closed. (Close
 * doesn't remove the DOM node.)
 */

答案 1 :(得分:0)

在创建对话框之前,请添加以下代码:

if (dojo.byId('displayQualificationPane') != null) {
                        dojo.forEach(dijit.findWidgets(dojo.byId('displayQualificationPane')), function (w) {
                            w.destroyRecursive();
                        });
                    }
                    dojo.destroy(dojo.byId('displayQualificationPane'));
                    if (dijit.byId('displayQualificationPane')) {
                        dijit.byId('displayQualificationPane').destroy();
                    }

每次创建它之前都会销毁它。

答案 2 :(得分:0)

另一种技术,类似于Himani的推荐,但也许更容易使用,是确保在调用hide函数后销毁对话框内容。这样,在初始化组件时,您不必对此进行任何复杂的检查。

hide: function() {
    this.inherited(arguments);
    window.setTimeout( dojo.hitch( this, 'destroyRecursive' ), 500 );
}

或者甚至

aspect.after( dialog, 'hide', dojo.hitch( this, function() {
                      setTimeout( function() {
                          dialog.destroyRecursive();
                      }, 500 );
              }));