2015-07-31 3 views
0

Я создаю dijit.Dialog и покажу/скройте, когда это необходимо. Однако теперь мне нужно отслеживать управление, так как я не могу иногда портить экран. Я превратил все «dialog.show/hide» в вызов функции, который у меня есть, как показано ниже. Но говорит, что dialog00Reg не определен. Зачем? Каков лучший способ сделать это?dijit single dialog page control

function dialogState(obj,state){ 
    var dialog00Reg; 
    require(["dijit/registry"], function(registry){ 
     dialog00Reg= registry.byId(obj); 
     if(state=="show"){ 
     if(!(dialog00Reg.open)){ 
      dialog00Reg.show(); 
     } 
     } 
     if(state=="hide"){ 
     if(dialog00Reg.open){ 
      dialog00Reg.hide(); 
     } 
     } 
    }); 
    } 
+0

Что такое 'obj'? 'registry.byId' ожидает идентификатор строки. Кроме того, почему бы не просто сохранить ссылку на диалог при его создании? – jason0x43

+0

@ jason0x43 Я создаю диалог в onLoad страницы. «Obj» - это просто моя попытка параметризации, которая прямо сейчас является только «диалогом», но может быть и в других диалоговых окнах. Каким образом можно создать/показать/скрыть один диалог из нескольких применений на одной странице? –

ответ

1

Как вы управляете диалоговым окном, зависит от того, как структурирована ваша страница. Один из способов - сделать что-то вроде следующего. Предполагается, что вы управляете диалоговым окном через обработчики событий.

<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 на скрытом, не имеет никакого эффекта.

+0

Благодарим вас за образование. Тем не менее моя проблема заключается в том, что я не могу убрать экран, даже если состояние состояния отслеживания не имеет значения, предположите, сколько раз вызывается диалог dialog.show()? –

+0

Что вы подразумеваете под "unim the screen"? Вы имеете в виду, что даже после отклонения диалога фон затуманивается? Или вы хотите, чтобы экран не менялся, даже когда диалог открыт? – jason0x43

+0

mea culpa это повторение, да должно было ответить на ваш вопрос первым, вопросы политики [link] (http://stackoverflow.com/questions/32289751/dojo-hide-not-clear?noredirect1_comment52456991_32289751). снова извините меня –