PopUpButton结合Menu的二级菜单


请注意:行数是单选,所以数据源为:type="radio"。隐藏列为多选,为type="check"。(参考Menu的帮助文档)
 
 

数据源代码(Menu组件的规定格式就是这样的,如有疑问,请参考帮助文档Menu篇):

 

 <mx:XML id="xmlDP">
  <root>
   <node label="行数" >
    <node label='10' type="radio" groupName="radioGroup" toggled="true"/>
    <node label='15'  type="radio" groupName="radioGroup" />
    <node label='30' type="radio" groupName="radioGroup"/>
    <node label='50' type="radio" groupName="radioGroup"/>
   </node>
   <node label="隐藏列">
    <node label="登录名称" type="check" value="1"/>
    <node label="全名" type="check" value="2"/>
    <node label="组织代号" type="check" value="3"/>
    <node label="状态" type="check" value="4"/>
    <node label="角色设置" type="check" value="5"/>
   </node>
  </root>
 </mx:XML>

 

组件代码:

 

<mx:PopUpButton label="其它"  id="pub" width="10%" creationComplete="creatMenu()"/>

 

AS代码:

 

//生成弹出菜单(隐藏列和显示条数)
   private function creatMenu():void{
   var menu:Menu = new Menu();
   menu.labelField = "@label";
   menu.dataProvider = xmlDP;
   menu.showRoot = false;
   menu.width = 100;
   menu.addEventListener("itemClick",ick);//为itemClick添加监听函数(事件是这样引用的)
            pub.popUp = menu;
  } 
  //点击隐藏列和显示条数的menu时,响应函数
  private function ick(evt:MenuEvent):void{
    var str:String = evt.item.@label;
    //页面大小改变事件
    if(str.match(/^[0-9]+$/)){//使用正则表达式来判断此字符串是否包含数字
       pageSize = int(str);//将str转换成int类型
                this.height=setHeight(pageSize);
                loadData(0);
    }else{
    var d:DataGridColumn = null;//声明一个DataGridColumn对象
    switch(int(evt.item.@value)){//根据value属性判断属于哪个列
     case 1:
      d = logname; logname是列的ID
      break;
     case 2:
      d = fullname;
      break;
     case 3:
      d = orgid;
      break;
     case 4:
      d = status;
      break;
     default:
      d = role;
    }
    //设置隐藏或显示
     if(d.visible == true){
      d.visible = false;
        } else{
                 d.visible = true;
                } 
    }

你可能感兴趣的:(xml,正则表达式)