前言
在使用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了。