当前位置: 首页 > article >正文

细粒度更换Ext的EditorGridPanel的每个单元格编辑器

        最近突然有这样的需求:当 EditorGridPanel 的每个单元格在进入编辑状态的时候,要根据数据的不同,有不同的编辑器展示(ComboBox或者TextField等).因为EditorGridPanel操作的编辑器最细粒度是列(看了API,不知道是否看漏),那么怎么能更细粒度地去更改到每个Cell里面的Editor呢? 这是我下面要演示的.

        首先我们看 Ext ColumnModel里面有个方法    getCellEditor .它是在每个单元格点击进入编辑状态的时候去获取编辑器的,查看下它的源码    getCellEditor : function(colIndex, rowIndex) {   return   this.config[colIndex].getCellEditor(rowIndex);   };

       Okay,既然是这样,那么我们就在这个方法上进行拓展.


      先来点假数据:


        var myData = [
          ['Home page',          'default'],
          ['News page', 'blue,red,default'],
          ['Login page',        'blue,red'],
          ['User page',          'default'],
          ['Info page', 'blue,red,default'],
          ['Jobs page', 'blue,red,default'],
          ['Connection','blue,red,default'],
          ['Salary',             'default'],
          ['UserCenter',         'default'],
          ['Nemours and Company','default'],
          ['The CoCompany',      'default']
       ];
       
       
      var store = new Ext.data.ArrayStore({
        fields:
            [
               {name: 'page'},
               {name: 'css'},
            ]
      });

       页面展示:

      

      如图,我要的是在点击 page-css的时候,当有多个值的时候展示的是下拉框,不是TextField.但是其他的单元格的编辑器却不变.

      我们先看下原生的getCellEditor方法返回的是什么(console.info(grid.getColumnModel().getCellEditor(1,1));):

      

     它返回的是 Ext.grid.GridEditor对象,okay,那么我们手动去造这个对象.

     先去看下Ext.grid.GridEditor的构造函数是什么样子:

      Ext.grid.GridEditor = function(field, config){
           Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
           field.monitorTab = false;
       };

 

    已经基本成型了,把上面的所有组合起来,getCellEditor方法的代码可以这样子写:

grid.getColumnModel().getCellEditor=function(colIndex, rowIndex)
     {
        var record = grid.getStore().getAt(rowIndex);
        var csss= record.data.css;
        var cssArray=csss.split(',');
        if(cssArray.length>1)
        {
           var data=[];
           for(var i =0;i<cssArray.length;i++)
           {
               var d =[];
               d.push(cssArray[i]);
               data.push(d);
           }
           var combo =
                new Ext.form.ComboBox({
                   typeAhead: true,
                   triggerAction: 'all',
                  lazyRender:true,
                  mode: 'local',
                  store: new Ext.data.ArrayStore({
                     id: 0,
                     fields: [
                        'val'
                     ],
                   data: data
                  }),
               valueField: 'val',
               displayField: 'val'
           });
           return new Ext.grid.GridEditor(combo,{});
        }
        return grid.getColumnModel().config[colIndex].getCellEditor(rowIndex);
     };

    最后结果:

    


    


      最后发现有个小缺点,多个选择了之后不能再重新选择其他的了.我们应该在record中有一个专门的字段存放原始值(比如:rawValue:'default,red',该rawValue不会被改变),不应该直接操作value.

   

http://www.lryc.cn/news/2412961.html

相关文章:

  • 用Dialog实现android 8种对话框
  • 我的外挂之路【一】按键精灵
  • 编写QQ外挂插件的原理和方法
  • Win7下MATLAB 7.0下载地址和详细安装
  • iPad及BT4下的WEP破解实验与分析 | Network Security
  • com网络资源
  • 龙将加速浏览器_chrome浏览器安装包下载-chrome浏览器完整安装包官方版下载
  • css 行高对齐 文字缩进 文字距离 文字的透明 文字阴影
  • 【计算机网络】初始网络原理(局域网 广域网 ip地址 端口号 协议通信)
  • 游戏外挂反外挂技术简介
  • 关于Qt的类继承
  • Red5入门教程(部分修改)
  • win8下不支持window phone SDK 的安装
  • Ravensword 2 掠夺之剑2 暗影大陆 图文攻略
  • 在线视频流播放控制(优酷、土豆、酷六、音乐台)
  • netkeeper客户端_星空极速下载-NetKeeper官方版下载[电脑版]-华军软件园
  • 自建服务器解网络锁,掌握iPhone1-4代刷机技巧
  • 2023年某科技大学数据库练习题(选择题)
  • 高仿精仿快播应用android源码下载
  • 什么是Gtalk
  • 四种JAD生成器之比较(附生成器下载)
  • QQ堂3.3可用外挂
  • 【转】Nero v9.4.26.0 多语(简体中文)版+完美破解(世界上最多人使用的烧录软体)...
  • app Vsync 的请求、定时、回调和结束
  • 海信变频空调整机不工作分析与检修案例
  • 电脑qq收藏在哪里打开_qq下载安装2019安卓版-qq下载安装2019安卓版官方版下载
  • 除以数用计算机都算不出来,小学生列算式35除以5等于61,网友:没错啊,计算器都是这样...
  • 万字长文带你 搞定 linux BT 宝塔面板 之外网上快速搭建苹果CMS电影网站
  • “qvod专用播放器”是专门为H网而做的吗?
  • 黑马点评之一人一单锁和事务的处理问题