在 Extjs 中递归地创建菜单和子菜单
Posted
技术标签:
【中文标题】在 Extjs 中递归地创建菜单和子菜单【英文标题】:create Menu and Sub menu recursively in 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可以深入,请提供建议
【问题讨论】:
【参考方案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 中测试
【讨论】:
以上是关于在 Extjs 中递归地创建菜单和子菜单的主要内容,如果未能解决你的问题,请参考以下文章