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

摘要:
=未定义){33ed.actions.setValue;34}else{35$.html;36}37}els{38$.html;39$.addClass;40}41}42});43}44}45}); 46}47}); 这里,需要注意的另一点是,我们添加了类:datagrideditable,而不为处于编辑状态的列设置值;因此,在easyui.min.js中,将扫描该类以获取结束编辑的方法中的编辑器对象,但我们无法在此处获取它。因此,在源代码中,我们添加了以下处理方法:if(ed!=_6cv){row[_6ea]=_6cv;_6e8=true;_6e9[_6ea]=_6kv;}}事实上,重写endEdit更清楚。这避免了理解源代码。
 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);
            }

免责声明:文章转载自《easyui 在编辑状态下,动态修改其他列值。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇9本Java程序员必读的书linux --&amp;gt; 文件系统十问下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS中数组的方法

在js中数组的重要性不言而喻,下面就来介绍一些数组的常用方法 一、基本方法 1.增 ①. arr.push() 在数组的末尾添加一个元素。 var arr = [1,2,3,4]; var newArr = arr.push(8); console.log(arr);  //(5) [1, 2, 3, 4, 8] 该方法会改变原数组,在数组...

将网站部署到服务器上出现_STORAGE_WRITE_ERROR_问题

用的thinkphp3.2的框架,在本地运行没有问题,部署到服务器上(基于centos的LAMP环境)即报错,报错信息如下(完全看不懂...):求大神帮帮忙~~~~(>_<)~~~~ :(_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Home/f8995a0e1afcdadc637612fa...

使用Node.js给图片加水印的方法

一、准备工作: 首先,确保你本地已经安装好了node环境。 然后,我们进行图像编辑操作需要用到一个Node.js的库:images。 这个库的地址是:https://github.com/zhangyuanwei/node-images,作者定义它为 “Node.js轻量级跨平台图像编解码库” ,并提供了一系列接口。 我们要做的首先是安装images库:...

go语言基础学习

go基础学习,面向对象-方法在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法 使用= 和:=的区别: // = 使用必须使用先var声明例如: var a a=100 //或 var b = 100 //或 var c int = 100 // := 是声明并赋值,并且系统自动推断类型,不需要var关键字 d :=...

BlockingCollection使用

BlockingCollection是一个线程安全的生产者-消费者集合。 代码 public classBlockingTest { BlockingCollection<int> bc = new BlockingCollection<int>(); publicBlockingTest(...

关于Linux上的SSH服务无法启动,提示“/var/empty/sshd must be owned by root and not group or world-writable”错误

首先通过物理终端进入到linux上,手工检查ssh发现没运行# /etc/init.d/sshd statussshd is stopped 手动启动服务,发现报告权限错误。# /etc/init.d/sshd start Starting sshd:/var/empty/sshd must be owned by root and not group o...