zoukankan      html  css  js  c++  java
  • 97. ExtJS之EditorGridPanel afteredit属性

    转自:https://zccst.iteye.com/blog/1328869

    1.

      1 之前大多用Ext.grid.GridPanel,现在需要可编辑功能,发现比以前稍复杂一些。
      2 就是需要对指定列进行可编辑设置,并获取编辑后的值,存入数据库。
      3 1,对指定列进行可编辑设置
      4 比如下拉菜单、日历等。
      5 
      6 2,获取编辑后的值
      7 可使用afteredit事件,并用panel的on()方法监听。
      8 当然也有beforeedit事件。
      9 
     10 不过,也可以直接在可编辑的下拉菜单中使用listener监听并存入数据库。
     11 Js代码  收藏代码
     12 
     13     listeners : {  
     14         'select' : function(obj, data, index){  
     15             selectedValue = data.data.name;  
     16       
     17         }  
     18     }  
     19 
     20 
     21 3,存入数据库
     22 使用Ext.Ajax.request({url:URL,params:"key:value",success:function(){},failure:function(){}});
     23 
     24 例子
     25 Js代码  收藏代码
     26 
     27     var store = new Ext.data.JsonStore({  
     28         url: 'api/divide_suit.php?action=suitList',  
     29         listeners:{  
     30             'loadexception' : function(e){  
     31                 alert(e.toString());  
     32             }  
     33         },  
     34         fields:[  
     35             {name:'id'},  
     36             {name:'suit'},  
     37             {name:'type'}  
     38         ]  
     39     });  
     40     store.load();  
     41       
     42     var colM=new Ext.grid.ColumnModel([  
     43         {header:"编号",dataIndex:'id',80,sortable:true},  
     44         {header:"套餐名称",dataIndex:"suit",240,sortable:true},  
     45         {header:"套餐类型",dataIndex:"type",sortable:true,160,  
     46             editor:new Ext.form.ComboBox({  
     47                 transform:"suitTypeList",  
     48                 triggerAction:'all',  
     49                 lazyRender:true  
     50             })  
     51         }  
     52     ]);  
     53       
     54     var panel = new Ext.grid.EditorGridPanel({  
     55         baseCls: 'x-plain',  
     56         id:grid_id,  
     57         title:'将套餐分组',  
     58         closable:true,  
     59         cm:colM,  
     60         store:store,  
     61         //autoExpandColumn:2  //自动将指定列扩展至最宽。  
     62     });  
     63       
     64     panel.on("afteredit", afterEdit, panel); //EditorGridPanel的afteredit事件监听   
     65     function afterEdit(obj){   
     66            var r = obj.record;//获取被修改的行   
     67            var l = obj.field; //获取被修改的列   
     68            var suit_id   = r.get("id");  
     69         var suit_name = r.get("suit");  
     70            var suit_type = r.get(l);  
     71         //alert('suit_id='+suit_id+' suit_name='+suit_name+'  suit_type='+suit_type);return;  
     72            Ext.Ajax.request({   
     73             url: 'api/divide_suit.php?action=edit_suit_type',  
     74             params: "suit_id="+suit_id + "&suit_name="+suit_name + '&suit_type='+suit_type,  
     75             success: function(resp,opts) {  
     76                 var respText = Ext.util.JSON.decode(resp.responseText);  
     77                 if(respText.status != 0){ alert(respText.msg); };  
     78             },  
     79             failure: function(resp,opts) { Ext.Msg.alert('保存失败', "请重试!"); }  
     80         });   
     81        }  
     82 
     83 
     84 批注:其他几个参数
     85 1,grid_id
     86 2,渲染panel到什么地方。
     87 
     88 下拉菜单还需要在html中写:
     89 Html代码  收藏代码
     90 
     91     <select name="suitTypeList" id="suitTypeList">  
     92       <option value='主流套餐'>主流套餐</option>  
     93       <option value='均衡套餐'>均衡套餐</option>  
     94       <option value='存储套餐'>存储套餐</option>  
     95       <option value='其他套餐'>其他套餐</option>  
     96     </select>  
     97 
     98 
     99 
    100 
    101 附:获取值afteredit的几种写法
    102 1,
    103 grid.on('afteredit',function(e){ //获得Ext.grid.EditorGridPanel编辑信息
    104       e.row;//修改過的行從0開始
    105       e.column;//修改列
    106       e.originalValue;//原始值
    107       e.value;//新值
    108     });
    109 来源:http://blog.csdn.net/yanji94521/archive/2008/06/16/2
    110 
    111 2,
    112 grid.on("afteredit", afterEdit, grid); //EditorGridPanel的afteredit事件监听
    113 function afterEdit(obj){
    114         var r = obj.record;//获取被修改的行
    115         var l = obj.field; //获取被修改的列
    116         var id = r.get("id");
    117         var lie = r.get(l);
    118         Ext.Ajax.request({
    119             url: '_action.php?action=edit',
    120             params: "id=" + id + "&name=" + l + '&value=' + lie
    121         );
    122     }
    123 来源:http://hi.baidu.com/_ollie/blog/item/c9f8fac305f7fe53b219a8f8.html
    124 
    125 3,
    126 grid.on("afteredit",afterEidt,grid);
    127 function(obj)
    128 {
    129    obj.row;;//修改过的行从0开始
    130    obj.column;//修改列
    131    obj.originalValue;//原始值
    132    obj.value;//修改后的值
    133    obj.grid;//当前修改的grid
    134    obj.field;//正在被编辑的字段名
    135    obj.record;//正在被编辑的行
    136 
    137 }
    138 
    139 
    140 
    141 
    142 但是,transform属性是将现有的<select>元素转化为ComboBox,transform的值是<select>元素的id,dom节点或元素。在设置了transform的情况下,如果将包含这个ComboBox的panel销毁,再重新生成一个该panel的对象时,会出现错误:s is null。出错的位置在ext-all-debug.js中,就是找不到当前的select元素。目前,这个问题不知如何解决。
    143 
    144 一种替代的方法是直接用store对ComboBox进行初始化。
    145 Js代码  收藏代码
    146 
    147     var colM=new Ext.grid.ColumnModel([  
    148             {header:"编号",dataIndex:'id',80,sortable:true},  
    149             {header:"套餐名称",dataIndex:"suit",240,sortable:true},  
    150             {header:"套餐类型",dataIndex:"type",160,  
    151                 editor:new Ext.form.ComboBox({  
    152                     id : 'x-combo-list-small',  
    153                     store: ['主流套餐','均衡套餐','存储套餐','其他套餐'],  
    154                     allowBlank:false,  
    155                     triggerAction: 'all',  
    156                     emptyText:'套餐类型...'  
    157                 })  
    158             }  
    159         ]);  
    160       
    161         var panel = new Ext.grid.EditorGridPanel({  
    162             baseCls: 'x-plain',  
    163             id:grid_id,  
    164             title:'将套餐分组',  
    165             closable:true,  
    166             cm:colM,  
    167             store:store,  
    168             frame:true,  
    169             clicksToEdit:1,//默认是点击2次  
    170             loadMask: {  
    171                 msg: '数据获取中,请稍候...'  
    172             },  
    173             region:'center'  
    174             //autoExpandColumn:2  //自动将指定列扩展至最宽。  
    175         });  
  • 相关阅读:
    数码摄影入门之十 数码相片后期处理
    Easy CHM 2.10
    LeapFTP 3.0.0.43 汉化版(附带LeapFTP 3.0注册码)
    使用“淘宝助理”的常见错误
    “互联网浏览器”控件与webBrowser控件的区别
    易语言源代码毁来者来了!!
    易语言正则表达式的多行匹配替换
    Explorer.exe鲜为人知的参数
    原始套接字概述
    网络技术数据封装
  • 原文地址:https://www.cnblogs.com/sharpest/p/7704427.html
Copyright © 2011-2022 走看看