【问题标题】:create Menu and Sub menu recursively in Extjs在 Extjs 中递归地创建菜单和子菜单
【发布时间】:2017-06-27 05:32:50
【问题描述】:

有没有办法像在 Treepanel Extjs 中创建树节点一样递归地创建菜单和子菜单

假设我有空的菜单项

我阅读了用于构建菜单和子菜单的 xml 输入

我的 xml 看起来像

<r>
<sub>
 <sub1>
  <sub 1.1/>
  <sub 1.1.1/>
</sub1>
<sub2/>
<sub3>
<sub 3.1>
<sub 3.1.1>
</sub3>
</r>

xml可以深入,请提供建议

【问题讨论】:

    标签: javascript extjs menu extjs3


    【解决方案1】:
    buildHelpMenuItems: function () {
    
                    var menuItemNodes = Ext.DomQuery.jsSelect('SUB', me.responseXML),
                    mb = (toolbarHlpMenu) ? toolbarHlpMenu.menu : '',
                    menu,
                    menuArray = [];
                    newMenuArray = [];
                    if(menuItemNodes.length ==0 || !mb)
                        return;
                    function buildMenuItem(node, scope) {
                        var menuitem = {};
                        menuitem.text = (node.attributes.getNamedItem('LABEL')) ? node.attributes.getNamedItem('LABEL').nodeValue : '';
                        menuitem.iconCls = (node.attributes.getNamedItem('clsName')) ? node.attributes.getNamedItem('clsName').nodeValue : '';
                        menuitem.url = (node.attributes.getNamedItem('URL')) ? node.attributes.getNamedItem('URL').nodeValue : '';
                        menuitem.handler = scope.helpMenuHandler;
                        menuitem.hidden = (node.attributes.getNamedItem('HIDDEN')) ? eval(node.attributes.getNamedItem('HIDDEN').nodeValue) : false;
                        menuitem.type = (node.attributes.getNamedItem('TYPE')) ? node.attributes.getNamedItem('TYPE').nodeValue : '';
                        return menuitem;
                    }
                    for (var i = 0; i < menuItemNodes.length; i++) {
                        var node = menuItemNodes[i];
                        menuItem = buildMenuItem(node,me);
                        if (!Ext.isEmpty(node.parentNode.getAttribute('LABEL'))) {
                            menuItem.parentEl = node.parentNode.getAttribute('LABEL');
                        } else {
                            menuItem.parentEl = "";
                        }
                        menuArray.push(menuItem);
                    }
                    for (var i = 0; i < menuArray.length; i++) {
                        var menuItem = menuArray[i];
                        if (menuItem.parentEl == "") {
                            newMenuArray.push(menuItem);
                        } else {
                            var parentEl = Ext.Array.findBy(menuArray, function (item) {
                                    return (item.text == menuItem.parentEl);
                                });
                            if (Ext.isEmpty(parentEl.menu)) {
                                parentEl.menu = [];
                                parentEl.menu.push(menuItem);
                            } else {
                                parentEl.menu.push(menuItem);
                            }
                        }
                    }
                    mb.add(newMenuArray);
    
            },
    

    此代码在 Extjs 4.2 中测试

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 2017-12-24
      • 2017-06-20
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多