EXT N级 联动

本文介绍了一种级联菜单的实现方式,通过JavaScript和ExtJS框架完成动态加载和联动选择的功能。支持不同用户级别的数据展示,并可根据用户登录级别自动初始化级联菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

function CasCadeMenu() {
 /*三者为私有属性,在被继承时必须被子类覆盖*/
 this.comboxIds = ["","city","county"];//级联菜单中所有combox的id值 若有用户无combox 则用""代替 如省用户
 this.valueField = ["CITY_ID","CITY_ID","COUNTY_ID"];/*不同用户在登录需要进行初始化的combox中的valueField字段 如省和市用户都是需                                                         要初始化city的Combox,那么valueField都为"CITY_ID"
                                                     */
 this.comboxLevel = [0,1,2];//0 代表省用户,1代表市用户, 2 代表县用户
 this.userLevel = 0;//登录用户级别 如默认为 0 即省用户
};
CasCadeMenu.prototype = {
 
 //获取登录用户级别 这个方法功能就是按照级别高低返回(0,1,2...)格式的级别,如默认省为 0 级别 则省用户返回0
 getUserLevel : function (casCadeMenuObj){//可能需要覆盖,如果获取级别形式不同的话
       
        DWREngine.setAsync(false);
   UserInfo.getUserLevel(function(data){
   casCadeMenuObj.userLevel = parseInt(data)-1;
   });
   DWREngine.setAsync(true);
   //需要减 1 就是因为省用户级别是1而combox联动级别由0开始算起
  },
  //页面加载时初始化级联菜单
 initCasCadeMenuOnLoad : function(){
    //初始化用 户登录级别
    this.getUserLevel(this);
   //初始化除最后个combox的其他所有combox的"select"监听器(所以才为 this.comboxIds.length-1)
    for(var k =0;k<(this.comboxIds.length-1);k++){
        if(this.comboxIds[k]!=""){
         this.addSelectListener(this.comboxIds[k],this.comboxLevel[k],this);
     }
    }
  //注释:由于省用户在级联菜单中不具有combox故不需要设置 combox值 直接运行下一步对下级初始化即可
  //根据用户级别设置用户所在级数以及该级数以上的combox值 如县用户为第二级,就要设置一级(市)与二级(县)的值
    var comboxObj=null;
    for(var i = 0;i<=this.userLevel;i++){
   
   //comboxIds[i]为0表示虽然有用户但该用户没有对应的combox
      if(this.comboxIds[i]=="") continue;
   //如果有则获取combox对象
   comboxObj = Ext.getCmp(this.comboxIds[i]);
   var loadData = this.getComboxData("",this.comboxLevel[i]); 
   //加载数据
   comboxObj.initialConfig.store.loadData(loadData);
   //设置初始值
   comboxObj.setValue(loadData[0][this.valueField[i]]);
   //设置本级及本级以上combox为不可选且不可修改(由于在IE7中采用disable有问题故采用另外一种方法)   
   //comboxObj.setDisabled(true);
  } 
  //设置该用户级别的下级联动数据
      this.initNextLevelData((comboxObj!=null)?comboxObj.getValue():"",this.comboxLevel[this.userLevel]);
 },
 /*
  * 初始化下一级别数据
  * @param upperComboxValue 上级combox的值 (用于根据此值得到下级combox需要的数据)
  * @param selfLevel 自身级别
 */
    initNextLevelData : function(selfComboxValue,selfLevel) {

   //下级联动的级别
     var nextLevel = selfLevel+1;
   //获取下级联动的combox对象
     var nextComboxObj = Ext.getCmp(this.comboxIds[nextLevel]);
   //获取下级联动数据
     var nextComboxData = this.getComboxData(selfComboxValue,nextLevel);
   //设置下级combox的活性 为 true , 
     nextComboxObj.enable();
   //清除下级combox中的数据
     nextComboxObj.clearValue();
   //初始化下级combox数据
     nextComboxObj.initialConfig.store.loadData(nextComboxData);
    //如果data只有一个,那么将数据设入combox
     if(nextComboxData.length==1) {
         nextComboxObj.setValue(nextComboxData[0][this.valueField[nextLevel]]);    
     }
   //设置更下级的combox活性 为disable ,并清空它们的数据
     for(var i=selfLevel+2;i<this.comboxIds.length;i++){
     var comboxObj = Ext.getCmp(this.comboxIds[i]);
     comboxObj.clearValue(); 
     comboxObj.initialConfig.store.loadData([]);
     //不用下面这种设置disable方清空数据,采用重新导入空数据达到清空数据目的
     //Ext.getCmp(this.comboxIds[i]).setDisabled(true);
     }
   //判断此时下级combox是否有数据,若有数据则直接进入下下级combox联动
     if((value = nextComboxObj.getValue())!=""){
         this.initNextLevelData(value,nextLevel);
     }
  
 },
 /*
  *获取联动Combox初始数据
  *@param value 需要得到数据的Combox的上级Combox的值
  *@param level 需要得到数据的Combox的级别
 */
 getComboxData:function(value,level){
    alert(level);
  var DwrReturnData;
  DWREngine.setAsync(false);
  if(level==0) {//返回省数据
      CityDao.queryCityAll(function(data){
    DwrReturnData = data; 
                   });
  }else if(level==1) {//返回市数据
      CityDao.queryCityAll(function(data){
    DwrReturnData = data;       
                                               });
  }else if(level==2){//返回县数据
      CityDao.queryCountyByCityId(value,function(data){
    DwrReturnData = data;        
              });
  }else if(level==3){//返回客户经理数据
   ClientManagerInterviewDAO.queryClientManagerByCondition(value,function(data){
    DwrReturnData = data;               
                  });
  }else if(level==4){//返回集团数据
      ClientManagerInterviewDAO.queryGrpByClientManager(value,function(data){
    DwrReturnData = data;               
                    });
  }
   DWREngine.setAsync(true);
   return DwrReturnData;
        
 },
 /*添加选择的监听器
  *@param comboxId 需要添加监听器的combox的Id
  *@param comboxLevel 需要添加监听器的combox的级别
 */
 addSelectListener : function(comboxId,comboxLevel,selectCallFun){
    var comboxObj = Ext.getCmp(comboxId);
    comboxObj.addListener("select",function(combox,value){
   selectCallFun.initNextLevelData(combox.getValue(),comboxLevel);
          },comboxObj,{});
   
 }
}

/*如何使用封装的级联菜单*/

function CusManVisMsgCascadeMenu(){
 CusManVisMsgCascadeMenu.superclass.constructor.call(this);
 /*必须覆盖的两个属性*/
 this.comboxIds = ["","city_pv","county_pv","csm_pv","bloc_pv"];
 this.valueField = ["CITY_ID","CITY_ID","COUNTY_ID","CUST_MANA_ID"];
 this.comboxLevel = [0,1,2,3,4];
}

Ext.extend(CusManVisMsgCascadeMenu,CasCadeMenu,{
     /*可填写需要覆盖的或者私有方法*/
     tostring : function(){alert("tostring")}
}); 
var CusManVisMsgCascadeMenuIns = new CusManVisMsgCascadeMenu();

Ext.onReady(function(){
  CusManVisMsgCascadeMenuIns.initCasCadeMenuOnLoad();   
      });

 

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值