目录分组
目录的分组管理,适用于大型以及动态目录,比上面的固定小型目录要复杂一些。
由于大型的目录很复杂,各种括号什么的很容易出错,修改一个地方可能会牵动到整个目录的架构,所以,为了方便管理与修改,同时方便其他人阅读代码就会将大目录拆分为一个个的小目录。
例如上面的3级目录,就可以按照级别简单拆分为三个部分,方便管理。
第一级目录:
local firstlevelmenu={
{szOption = "发布统计",
szIcon = "ui\\Image\\Minimap\\Minimap.UITex";
nFrame = 185;
szLayer = "ICON_LEFT";}
}
第二级目录:
local secondlevelmenu={
{szOption = "发布",fnAction=function() OutputMessage("MSG_SYS","测试发布功能\n") end},
{szOption = "发布频道"}
}
第三级目录:
local thirdlevelmenu={
{szOption = "近聊频道", bMCheck=true,bCheck=true,bChecked= channel==1,},
{szOption = "小队频道", bMCheck=true,bCheck=true},
{bDevide = true,},
{szOption = "团队频道", bMCheck=true,bCheck=true},
{szOption = "帮会频道", bMCheck=true,bCheck=true},
}
然后使用table.insert命令将目录一层层导入
table.insert(目标表格名字,要导入的表格名字)
从最高级的目录依次向低级导入
table.insert(secondlevelmenu,thirdlevelmenu)
table.insert(firstlevelmenu,secondlevelmenu)
然后发现悲剧了,这个并不是我们想要的。这是因为{}造成的原因。
假设a目录为a={{szOption="测试"}}
b目录为b={{szOption="测试2"}}
例如在a目录中导入b目录后:
a={
{szOption="测试"},
{
{szOption="测试2"}
}
}
在同一级里面,b目录的第一个szOption为空,所以会出现刚才那种情况。
要解决这种情况的话得一个一个添加目录,如下:
首先建立一个空目录:
local menu={}
在这里导入第一层目录,注意去掉一个{}
table.insert(menu,firstlevelmenu)
然后依次导入第二级目录,因为大括号已经去掉了,所以要导入两次
table.insert(firstlevelmenu,{szOption = "发布",fnAction=function() OutputMessage("MSG_SYS","测试发布功能\n") end})
table.insert(firstlevelmenu,{szOption = "发布频道"})
第三层目录以此类推。
最后Popup最开始建立的空目录即可达到原有的效果。
虽然这种方法麻烦了一些,但是在做大型目录或者动态目录的时候会使用到,主要是这个思路清楚,如果是固定或者小型目录建议还是使用前面介绍的方法。