2013-05-01 6 views
0

Я работаю над контекстным меню в dijit. Код почти завершен, и меню появляется, когда я нажимаю правой кнопкой мыши на прикрепленный dom-узел. Проблема в том, что мне нужно иметь возможность отображать/скрывать меню программно. Оказывается, что не существует какого-либо метода, как .Show() или .hide()Показать dijit/Меню программно

вот код:

var top_settings_menu; 

require(["dojo/ready", "dijit/Menu"], function(ready, Menu) { 
    ready(function() { 
     top_settings_menu = new Menu(); 
     top_settings_menu.bindDomNode("settings"); 

     ...menu items 
     ........ 

     top_settings_menu.startup(); 

    }); 
}); 

Вот что мне нужно: метод, чтобы показать, скрыть меню, как программно: top_settings_menu.show(); top_settings_menu.hide();

ответ

1

This fiddle демонстрирует два подхода, но я не знаю, если есть официальный способ сделать это.

Настройка меню:

var pMenu; 

require(["dojo/ready", "dijit/Menu", "dijit/MenuItem", "dijit/PopupMenuItem"], function (ready, Menu, MenuItem) { 
    ready(function() { 
     pMenu = new Menu({ 
      targetNodeIds: ["progmenu"] 
     }); 
     pMenu.addChild(new MenuItem({ 
      label: "Simple menu item" 
     })); 
     pMenu.startup(); 
    }); 
}); 

function runAfterDelay(fn, ms) { 
    setTimeout(function() { 
     console.log("Timeout " + new Date()); 
     fn(); 
    }, ms); 
} 

Добавьте обработку событий.

  • Подход №1 - позвонить dijit/popup.close(), передав меню в качестве единственного параметра.
  • Подход № 2 синтезирует blur события «трюк» меню в закрытие.

...

require(["dojo/dom", "dojo/on", "dijit/popup"], function (dom, on, popup) { 
    var timeout = 3000; 
    on(dom.byId("btnPopupClose"), "click", function() { 
     runAfterDelay(function() { 
      if (pMenu) { 
       console.log("Calling .close()"); 
       popup.close(pMenu); 
      } 
     }, timeout); 
    }); 
    on(dom.byId("btnTriggerBlur"), "click", function() { 
     runAfterDelay(function() { 
      var opts = { 
       bubbles: true, 
       cancelable: true 
      }; 
      console.log("emitting blur event"); 
      on.emit(pMenu.domNode, "blur", opts); 
     }, timeout); 
    }); 
}); 
Смежные вопросы