datagrid调用getEditor为null?这样你试过了吗?

datagrid调用getEditor为null?这样你试过了吗?

前言

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章