是否可以使用 Dijit/Menu 在 Dijit 的特定位置插入菜单项

Is it possible to insert a menu item at a specific position in Dijit using Dijit/Menu

我有一个菜单,其内容需要根据用户交互进行显着更改。这意味着需要引入一些新的菜单项,也需要删除一些菜单项。查看 Dojo 已发布的 API 文档,似乎没有办法在不删除现有项目并从头开始重新创建菜单的情况下重做菜单的内容。

dijit/MenugetChildren() 方法 returns 一个数组,表明可能有一种相对简单的方法可以在特定索引位置插入菜单选项。但是,不幸的是,我找不到将菜单项数组附加到 dijit/Menu.

中的方法

有谁知道直接的方法(使用API)?

dijit/Menu 缺少一些相当主流的用例。我做了一个自定义实现,添加了我似乎一直想要的各种功能。其中包括切换给定的菜单项。

I've pastebin'd my "dijit/ContextMenu" widget (my name, not theirs) here,但是答案是否定的,还得自己动手。您可以根据需要动态 add/remove MenuItems,或者我所做的是在创建时将它们全部注入,然后根据需要 show/hide:

    [snip]
    hideMenuItem :function(menuItemId){
        var menuItems = this.getChildren();
        for(var i=0; i < menuItems.length; ++i){
            if(menuItemId === menuItems[i].id){
                domStyle.set(menuItems[i].domNode, "display", "none");
                break;
            }
        }
    },

    showMenuItem : function(menuItemId){
        var menuItems = this.getChildren();
        for(var i=0; i < menuItems.length; ++i){
            if(menuItemId === menuItems[i].id){
                domStyle.set(menuItems[i].domNode, "display", "");
                break;
            }
        }
    }
    [/snip]

@gabriel 建议的答案是我的起点,我注意到可以通过在 Menu.addChild 中指定索引来在特定位置添加菜单项。

addChild(widget,insertIndex)

我最终做的是不同的事情:

  • 循环 menu.getChildren() 到我正在寻找的索引
  • 删除菜单项(使用removeChild
  • 添加新菜单项(使用 addChild

我无法使用 insertIndex,因为我的菜单有需要处理的分隔符(唉!)。