前言
在使用easyui的datagrid时遇到了这么一个问题,使用getEditor获取editor的结果为空,记录一下解决过程。
问题引入
var row = $('#tt').datagrid('getSelected');
var rowIndex = $('#tt').datagrid('getRowIndex',row);
let ed
ed = $('#tt').datagrid('getEditor', {index:rowIndex, field:'aa'});
$(ed.target).combobox('reload', url);
在上面一段代码中,最后一行报错,Cannot read property ‘target’ of null
无法获取到target,如果此时在控制台打印editor就会发现是null,说明并没有实际取到editor。
问题解决
在网上搜索datagrid editor 为null 大概可以找到这个方案
方案一
在设置值之前开启行编辑,也就是在最前面加上这一行
$('#tt').datagrid('beginEdit', 0);
那么问题解决了没有呢?并没有,这种方案在编辑行是适用的,在datagrid的编辑行中前面获取到的rowIndex确实可以取到对应行,但在新增行中rowIndex=-1,而-1是没办法获取到对应行的此时就需要用另一种方法
方案二
var row = $('#tt').datagrid('getSelected');
var rowIndex = $('#tt').datagrid('getRowIndex',row);
let ed
if (rowIndex == -1) {
ed = $('#tt').datagrid('getEditor', {index:$('#tt').datagrid('getRows').length-1, field:'aa'});
$(ed.target).combobox('reload', url);
} else {
ed = $('#tt').datagrid('getEditor', {index:rowIndex, field:'aa'});
$(ed.target).combobox('reload', url);
}
因为新增数据时是使用appendRow在行尾新增一行,所以当需要获取的数据行是新增数据时需要用总行数-1。
此时就可以成功获取target了。