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

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

本文关键字:Dijit 定位 位置 插入 菜单项 可以使 menu 是否      更新时间:2023-09-26

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

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

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

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

我已经粘贴了我的"dijit/ContextMenu"小部件(我的名字,不是他们的)在这里,但答案是不,你必须自己做。您可以根据需要动态添加/删除MenuItem s,或者我所做的是在创建时注入它们,然后根据需要显示/隐藏:

    [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,因为我的菜单有分隔符需要处理(叹气!)