Как я могу проверить, чтобы видеть, загружается ли диалоговое окно Dojo?

По моему мнению, это не должно быть разрешено в C ++:

class A {
public:
  virtual string foo(){return "A::foo";}
};

class B : public A {
public:
  virtual string foo(){return "B::foo";}
};

int main () {
  B* b = new B();
  // In my opinion the following should not be allowed
  cout << b->A::foo() << endl;  // Will print "A::foo"
}

Это может показаться правильным, но это означает, что вы не можете переопределить метод, не позволяя пользователям подкласса вызывать оригинальный метод вместо новый.

Просто подумайте о подклассе коллекции, где вы хотите увеличить количество элементов при добавлении элемента в саму коллекцию.

Логичным решением было бы переопределить метод add (), чтобы увеличить счетчик перед добавлением элемента, но пользователь новой коллекции может добавить элемент к нему, используя старый метод, так что вы обходите приращение и получаете элементы. -счетчик не согласен с фактическим количеством элементов коллекции.

Это невозможно в Java.

5
задан Jason Plank 21 November 2011 в 18:28
поделиться

2 ответа

Диалоговое окно предоставляет два свойства , которые вы, возможно, захотите проверить: isLoaded и open . Покопавшись в коде, вы найдете следующие описания:

  • open: True, если диалоговое окно в настоящее время отображается на экране.
  • isLoaded: True, если ContentPane содержит данные, указанные во время инициализации (через href или встроенное содержимое ) или устанавливается через attr ('content', ...) / attr ('href', ...) False, если в нем нет содержимого или если ContentPane все еще загружает href.

Итак, вы можете просто:

var dialog = dijit.byId("blah");
if( dialog.open ) {
    dialog.destroy();
}
4
ответ дан 14 December 2019 в 19:21
поделиться

Вы хотите спрятать его или уничтожить?

Если вы просто хотите показать / скрыть его, вы можете сделать следующее:

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 .

1
ответ дан 14 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: