如何检查Dojo对话框是否已加载?

5

我正在运行一个需要关闭Dojo对话框的函数。如何检查是否加载了Dojo对话框?我是否应该使用纯JavaScript,并通过id检查它是否未定义?

我正在运行一个需要关闭Dojo对话框的函数。如何检查是否加载了Dojo对话框?我是否应该使用纯JavaScript,并通过id检查它是否未定义?
if (dijit.byId("blah") !== undefined) { 
     destroyRecursive dijit;
}

我应该使用对话框对象的属性,例如:
isFocusable method
isLoaded property

这是结束函数: function bufferAddress(xCoord, yCoord) { if (dijit.byId("selectLocationDlg") !== undefined) { dijit.byId("selectLocationDlg").destroyRecursive(); } // 这里还有一些其他的代码 } - shawn deutch
2个回答

4

Dialog提供了两个属性,您可能希望检查它们: isLoadedopen。通过挖掘代码,您将找到以下描述:

  • open:如果对话框当前在屏幕上显示,则为True。
  • isLoaded:如果ContentPane中有数据,可以是在初始化期间指定(通过href或内联内容),也可以通过attr('content', ...) / attr('href', ...)设置。如果没有任何内容,或者ContentPane仍在下载href,则为False。

因此,您可以这样做:

var dialog = dijit.byId("blah");
if( dialog.open ) {
    dialog.destroy();
}

8年后,您应该使用if (dialog && dialog.open)或其他安全检查来确保dialog存在(typeof(dialog) != 'undefined'dialog != null等)。 - Daevin

1
你想隐藏它还是销毁它?
如果你只想显示/隐藏它,可以按照以下步骤操作:
var dialog = dijit.byId('blah');
if (dialog) {
  if (dialog.open) {
    dialog.hide();
  }
  else {
     dialog.show();
  }
}

如果你想要将其销毁来释放内存:
var dialog = dijit.byId('blah');
dialog.destory();

我认为destroy是递归的,因为它调用了其父级destroy方法,而其中一个父级是dijit.layout.ContentPane


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接