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

时间:2015-05-20 15:37:54

标签: javascript drop-down-menu dojo

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

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

的方法

有没有人知道直接的方式(使用API​​)?

2 个答案:

答案 0 :(得分:1)

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

I've pastebin'd my "dijit/ContextMenu" widget (my name, not theirs) here,但答案是否定的,你必须亲自去做。您可以根据需要动态添加/删除MenuItem,或者我在创建时将它们全部注入,然后根据需要显示/隐藏:

    [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]

答案 1 :(得分:1)

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

  

addChild(widget,insertIndex)

我最终做的最终结果是不同的:

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

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