dojo 以编程方式显示dijit/Menu

pw136qt2  于 2022-12-08  发布在  Dojo
关注(0)|答案(1)|浏览(225)

我正在dijit中处理一个上下文菜单。代码几乎完成了,当我右键单击附加的dom节点时,菜单会弹出。**问题是我需要能够以编程方式显示/隐藏菜单。**似乎没有像.show()或.hide()这样的方法。
代码如下:

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();

    });
});

我需要的是:方法以编程方式显示隐藏菜单,如下所示:show()中的参数设置; hide()函数;

dsekswqp

dsekswqp1#

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);
    });
});

相关问题