2008-12-04 5 views
3

Кто-нибудь знает, как я могу закрыть все модальные диалоги, созданные Dojo? По-видимому, раньше была функция dojo.popup.closeAll, но она больше не доступна в последней версии API Dojo, которая поставляется с Spring JS.Закрыть все модальные диалоги в Dojo

ответ

3

Правильно ... причина, по которой этот метод больше не существует, заключается в том, что от 1.0, кто открывает всплывающее окно, отвечает за его закрытие. Это изменение архитектуры, которое я сделал.

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

Билл

+0

OK. К сожалению, это действительно не помогает моей ситуации, но это не ваша вина. Благодарим вас за ответы, ребята, это очень ценится. – 2008-12-11 02:46:03

1

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

3

Найдет все буквенные Диалоги в страницу и скрыть их:

dijit.registry.filter(function(w){ 
    return w && w.declaredClass == "dijit.Dialog" 
}).forEach(function(w){ 
    w.hide(); 
}); 
+0

Когда я смотрю на это, он говорит, что «фильтр» не определен. Были ли какие-либо изменения в этом? – streetlight 2014-07-11 12:48:14

0

Я не знаю, если это имеет какой-либо пользы, но я предпочитаю использовать только один диалог каждая страница (поскольку она является модальной). Все содержимое диалогов - xhrGot с сервера, и я трачу все время в течение жизненного цикла страницы повторно и снова на тот же диалог, просто изменяя его атрибуты: href и его title. Я считаю, что это работает, а также несколько диалогов.

0

додзё> = 1.10:

define(['dijit/registry'], ... 

registery.toArray().filter(function(w){ 
    return w && w.declaredClass == "dijit.Dialog" 
}).forEach(function(w){ 
    w.hide(); 
}); 
Смежные вопросы