从源码解决layui treeselect报错处理

851 阅读1分钟
情不知所起,bug不知哪里来。

昨日依旧,今日阑珊。

xx:你的代码是不是有问题,咋又报错了?

xx:...。

别有幽愁暗恨生,此时无声胜有声。

Cannot read property 'getNodeByParam' of undefined

对于这个报错,思前想后,刚开始以为是加载顺序的问题,结果多次尝试发现没那么简单

*&*&&*¥%&


一阵捣鼓之后无效,我决定对源码动刀了==

看源码:

/** * 选中节点,因为tree是异步加载,所以必须在success回调中调用checkNode函数,
否则无法获取生成的DOM元素 * @param filter lay-filter属性 
* @param id 选中的id */
TreeSelect.prototype.checkNode = function(filter, id){
   var o = obj.filter(filter),
      treeInput = o.find('.layui-select-title input'),
       treeObj = obj.treeObj(filter),
       node = treeObj.getNodeByParam("id", id, null),
      name = node.name;
   treeInput.val(name);
   o.find('a[treenode_a]').removeClass('curSelectedNode');
   obj.get(filter).val(id).attr('value', id);
   treeObj.selectNode(node);
 };

》》》

TreeSelect.prototype.checkNode = function(filter, id,treeId){ 
 var newTreeId = treeId.replace('layui-treeSelect','layui-treeSelect-body'); 
 var inputId = treeId.replace('layui-treeSelect','treeSelect-input'); 
 var treeObj = $.fn.zTree.getZTreeObj(newTreeId); 
 var node = treeObj.getNodeByParam("id", id, null); 
 var treeInput = $("#"+inputId); 
 treeInput.val(node.name); 
 treeObj.selectNode(node);
};

调用略作修改(注释的是原用法,下方是改后的)

success:function(data){ 
   if (initData && initData.deptId) {    
    // treeSelect.checkNode('deptId', initData.deptId); 两个参数,分别为lay-filter的值、节点id(异步加载数据的id)
       treeSelect.checkNode('deptId',initData.deptId,data.treeId);  //加一个回调的treeId
  }else {        
    // treeSelect.checkNode('deptId',"production");    
       treeSelect.checkNode('deptId',"production", data.treeId); 
   }
}

山重水复疑无路,柳暗花明又一村。

其实这也是缓兵之计,曲线救国。