动态目录
所谓的动态目录,就是可以添加与删除目录项的目录,像上面那种是做不到的。 通过cube代码调试器,我们试着做一个动态的目录玩玩。
首先,建立一个空的全局空目录,用于存储动态数据: mymenudata={} 输入这个后,运行后删除这一行。然后Output(mymenudata)来看看是否已经创建了一个全局的目录变量。
接下来定义一个将名字添加到mymenudata中的匿名函数:local fnAddToList=function(szName) if szName=="" or szName==nil then return end table.insert(mymenudata,szName) end 再来就开始构造一个简单的固定2级目录框架: local menu={ {szOption="我的动态目录"}, {bDevide=true} } local datalist={szOption="数据测试列表"} local addtolist={szOption="添加",fnAction=function() GetUserInput( "请输入列表名字", fnAddToList, nil, nil, nil, "" ) end} table.insert(menu,datalist) table.insert(menu,addtolist) 将这个目录分开,是为了在datalist里面添加动态列表,合在一起无法进行添加。
然后,就是遍历mymenudata来一个个导入里面的数据,以达到动态效果。 总的来说,就是通过改变mymenudata的数据,来改变PopupMenu。 for i,v in pairs(mymenudata) do local data= { szOption=v,{szOption="删除",fnAction=function() mymenudata[i]=nil end,fnAutoClose=function() return true end} } table.insert(datalist,data) end 遍历mymenudata里面的每一项,然后为每一项建立目录,并且导入datalist里面。 所谓的删除其实就是将目录变量里面的值等于空,这样就删除了目录里面的这对值,并且关闭目录,下次再打开的时候就不会添加这个了,所以,变相达到删除的目的。
为了所谓的用户方便,再加上一个清空列表的目录: if next(mymenudata)~=nil then table.insert(datalist,{bDevide=true}) table.insert(datalist,{szOption="清空列表",fnAction=function() mymenudata={} end}) end 这里next(mymenudata)是判断mymenudata这个表格是否为空,next的作用是返回表格中下一项的array(序列)跟值,参数为:next(表格,序号)。 比如说一个表格: t={1,2,3,4,5} next(t)返回值是1,1 next(t,1)返回值是2,2 next(t,2)返回值是3,3 以此类推,next(t)返回值为空的时候,就表示这个表格是空的。
像是t=={},t==nil这类的判断是不对的 前者是判断表格t跟匿名表格的地址位置,两个地址位置永远是不相同的 后者是判断t是否为空,然而t={}并不是空值 所以使用next(t)来判断。
于是,一个简单的动态目录就完成了:
|