function getSubmenu(submenu)
{
var menustr="";
for(var i=0;i<submenu.length;i++)
{
var menu=submenu[i];
var str="";
if(!menu.submenu||menu.submenu.length==0)
{
var toggleStr="";
if(menu.toggle==0)
{
toggleStr="disabled";
}
str='<li class="stick '+toggleStr+' "><a menuid='+menu.id+' action='+menu.action+' href="#"><i class='+menu.icon+'></i>'+menu.name+'</a></li>' ;
}
else
{
var toggleStr="";
if(menu.toggle==0)
{
toggleStr="disabled";
}
str='<li class="stick '+toggleStr+' "><a menuid='+menu.id+' action='+menu.action+' class="dropdown-toggle" href="#"><i class="'+menu.icon+'"></i>'+menu.name+'</a><ul class="dropdown-menu" data-role="dropdown">'+arguments.callee(menu.submenu)+'</ul></li>';
}
menustr=menustr+str;
}
return menustr;
}
在写自动生成菜单的时候,本以为按C++方式写递归就没什么事了,可是发现怎么搞,都只能读到数组中第一个值,经过资料搜索与整理,特写出来以警示以后。
其中最关键是调用的时候如果用该函数名的话,就会丢失现场(我遇到的是顶级现场,奇怪的是后续的现场又没有问题),而只能用
arguments.calleefunction getSubmenu(submenu)
进行调用。
参考了:
1.Javascript递归解决方案http://www.nowamagic.net/javascript/js_RecurrencePlot.php
2.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee