5

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

if (dijit.byId("blah") !== undefined) { 
     destroyRecursive dijit;
}

或者我是否使用对话框对象的属性,例如:

isFocusable method
isLoaded property
4

2 回答 2

4

Dialog 提供了两个您可能想要检查的属性isLoaded:和open. 通过挖掘代码,您会发现以下描述:

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

所以,你可以:

var dialog = dijit.byId("blah");
if( dialog.open ) {
    dialog.destroy();
}
于 2009-07-21T18:25:45.607 回答
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.

于 2009-07-20T23:28:18.747 回答