Как вы управляете диалоговым окном, зависит от того, как структурирована ваша страница. Один из способов - сделать что-то вроде следующего. Предполагается, что вы управляете диалоговым окном через обработчики событий.
<html>
<head>
<!-- head tags ... -->
<script src="somewhere/dojo.js" data-dojo-props="async:true"></script>
</head>
<body>
<!-- tags ... -->
<script>
require([
'dojo/on',
'dijit/Dialog',
...
], function (on, Dialog, ...) {
var dialog;
on(document.getElementById('showButton'), 'click', function() {
if (!dialog) {
// Create the dialog if it doesn't already exist
dialog = new Dialog({ ... });
}
dialog.show();
});
on(document.getElementById('hideButton'), 'click', function() {
if (dialog) {
dialog.hide();
}
});
...
});
</script>
</body>
</html>
В этом примере один скрипт управляет созданием диалога и всеми слушателями, которые взаимодействуют с диалогом. Поскольку диалог создается здесь, легко сохранить ссылку на него, поэтому слушателям никогда не придется его искать.
Если ваше диалоговое окно создано где-то в другом месте, и вы знаете идентификатор диалогового окна, вы можете сделать что-то свое исходное. Тем не менее, было бы проще поставить эту функциональность в обработчиках, где это было необходимо, больше как:
<html>
<head>...</head>
<body>
...
<script>
require([ 'dojo/on', 'dijit/registry' ], function (on, registry) {
var dialogId = 'myDialog';
on(document.getElementById('showButton'), 'click', function() {
var dialog = registry.byId(dialogId);
if (dialog) {
dialog.show();
}
});
on(document.getElementById('hideButton'), 'click', function() {
var dialog = registry.byId(dialogId);
if (dialog) {
dialog.hide();
}
});
});
</script>
</body>
</html>
Вы действительно не нужно беспокоиться об отслеживании состояния, так как вызова show
на уже видимом диалоге, или hide
на скрытом, не имеет никакого эффекта.
Что такое 'obj'? 'registry.byId' ожидает идентификатор строки. Кроме того, почему бы не просто сохранить ссылку на диалог при его создании? – jason0x43
@ jason0x43 Я создаю диалог в onLoad страницы. «Obj» - это просто моя попытка параметризации, которая прямо сейчас является только «диалогом», но может быть и в других диалоговых окнах. Каким образом можно создать/показать/скрыть один диалог из нескольких применений на одной странице? –