2013-05-01 195 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); 
    }); 
});