• easyui 在编辑状态下,动态修改其他列值。


     1     首先是自定义了一个方法uodateColumn更新列值  
     2       
     3     /**  
     4                  *自定义的修改列值方法   
     5                  */  
     6                 $.extend($.fn.datagrid.methods, {  
     7                     updateColumn: function(datagrid,data) {  
     8                         datagrid.each(function(){  
     9                             //获取缓存中的配置数据  
    10                             var gridObj=$.data(this,"datagrid");  
    11                             var opts=gridObj.options;  
    12                             //获取行数据  
    13                             var row=opts.finder.getRow(this,data.index);  
    14                             data.row=data.row||{};  
    15                             var update=false;  
    16                             //判断是否需要更新  
    17                             for(var updateColumn in data.row){  
    18                                 if(data.row[updateColumn]!==row[updateColumn]){  
    19                                     update=true;  
    20                                     break;  
    21                                 }  
    22                             }  
    23                             if(update){  
    24                                 var tr=opts.finder.getTr(this,data.index);  
    25                                 var view=opts.view.renderRow.call(opts.view,this,["attr1"],true,data.index,data.row);  
    26                                 if(tr.hasClass("datagrid-row-editing")){  
    27                                     //找到所有需要更新值的列  
    28                                     tr.find('div').each(function(i){  
    29                                         if(data.row[$(this).parent().attr('field')]!=undefined){  
    30                                             if($(this).attr('class').indexOf('datagrid-editable')!=-1){  
    31                                                 var ed=$.data(this,"datagrid.editor");  
    32                                                 if(ed!=undefined){  
    33                                                     ed.actions.setValue(ed.target,data.row[$(this).parent().attr('field')]);  
    34                                                 }else{  
    35                                                     $(this).html(data.row[$(this).attr('field')]);  
    36                                                 }                                             
    37                                             }else{  
    38                                                 $(this).html(data.row[$(this).attr('field')]);  
    39                                                 $(this).addClass("datagrid-editable"); 
    40                                             }  
    41                                         }  
    42                                     });  
    43                                 }  
    44                             }  
    45                         });  
    46                     }  
    47                 });  

    在这里,还有一个需要注意的时,我们将没在编辑状态下的列设值的同时添加了class:datagrid-editable;

    所以在easyui.min.js中针对结束编辑的方法中会对该类进行扫描获取editor对象,但我们在这里是获取不到的。

    所以在源码中我们加入了以下处理方法:

    if(ed!=undefined){
    var t=$(ed.target);
    var _6eb=t.data("textbox")?t.textbox("textbox"):t;
    _6eb.triggerHandler("blur");
    var _6ec=ed.actions.getValue(ed.target);
    if(row[_6ea]!=_6ec){
    row[_6ea]=_6ec;
    _6e8=true;
    _6e9[_6ea]=_6ec;
    }
    }else{
    $(this).removeClass("datagrid-editable");
    var _6cv=$(this).html();
    if(row[_6ea]!=_6cv){
    row[_6ea]=_6cv;
    _6e8=true;
    _6e9[_6ea]=_6cv;
    }
    }

    其实更明确的做法是将endEdit也重写了。这样就避免了懂源码。



    在html页面中按照easyui的表格使用,声明表格:

    <pre name="code" class="html">$('#demo').datagrid({
                    fitColumns: true,
                    iconCls: 'icon-edit',
                    singleSelect: true,
                    url: 'js/datagrid_data1.json',
                    method: 'get',
                    onClickRow: onClickRow,
                    onEndEdit: onEndEdit,
                    columns: [
                        [{
                            field: 'itemid',
                            title: 'Item ID',
                             20,
                            align: 'center',
                            checkbox: true
                        }, {
                            field: 'productid',
                            title: 'productid',
                             20,
                            sortable: true,
                            align: 'center'
                        }, {
                            field: 'listprice',
                            title: 'List Price',
                             20,
                            align: 'center',
                            editor: {
                                type: 'numberbox',
                                options: {
                                    precision: 2,
                                    groupSeparator: ','
                                }
                            }
                        }, {
                            field: 'unitcost',
                            title: 'unitcost',
                             20,
                            sortable: true,
                            editor: {
                                type: 'textbox'
                            }
                        }, {
                            field: 'attr1',
                            title: 'attr1',
                             20,
                            sortable: true,
                            editor:{
                                type:'datebox'
                            }
                        }, {
                            field: 'status',
                            title: 'status',
                             20,
                            sortable: true,
                            align: 'left',
                            editor:{
                                type:'combobox',
                                options:{
                                    valueField:'id',
                                    textField:'text',
                                    data:[{id:1,text:'一号'},{id:2,text:'二号'}]
                                }
                            }
                        }]
                    ]
                });

    //声明一些打开编辑的事件

    var editIndex = undefined;
    
                function endEditing() {
                    if (editIndex == undefined) {
                        return true
                    }
                    if ($('#demo').datagrid('validateRow', editIndex)) {
                        $('#demo').datagrid('endEdit', editIndex);
                        editIndex = undefined;
                        return true;
                    } else {
                        return false;
                    }
                }
    
                function onClickRow(index) {
                    if (editIndex != index) {
                        if (endEditing()) {
                            $('#demo').datagrid('selectRow', index).datagrid('beginEdit', index);
                            var ed = $('#demo').datagrid('getEditor', {
                                index: index,
                                field: 'listprice'
                            });
                            if (ed) {
                                ed.target.textbox({
                                    inputEvents: $.extend({}, $.fn.textbox.defaults.inputEvents, {
                                        keydown: function(e) {
                                            if (e.keyCode == 13) {
                                                var row = $('#demo').datagrid('getSelected');
                                                $('#demo').datagrid('updateColumn',{index:index,row:{attr1:'2016-01-12',status:'1',unitcost:'33'}});
                                            }
                                        }
                                    })
                                });
                            }
                            editIndex = index;
                        } else {
                            setTimeout(function() {
                                $('demo').datagrid('selectRow', editIndex);
                            }, 0);
                        }
                    }
                }
                function onEndEdit(index, row) {
                    console.log(row);
                }
  • 相关阅读:
    01-面向对象
    12-期末作业
    11-Linux-vim /bash
    组播地址
    rip
    华为hcnp r&s考试一共有三门,R&S-IERS,R&S-IENP,R&S-IEEP

    spring注解开发
    yml和properties的加载顺序和区别
    @ImportResource
  • 原文地址:https://www.cnblogs.com/freemrz/p/5595437.html
Copyright © 2020-2023  润新知