前台ext treestore id重复的解决方法。

来源:互联网 发布:linux smaps 编辑:程序博客网 时间:2024/05/09 13:49

前几天遇到这个问题,是人员的管理,一个组织下面有其他子组织,一个人可以属于多个组织。这样的情况出现了同个tree 中store id出现重复的现象。

这时候需要对他的id进行拼接。

我查了api,找到store 有个事件,是load,在他load的时候对他进行拼接原理就是:“如果一个节点不属于跟节点,他的id就是父节点id+本身id”。

  listeners:{          beforeload:function(){               // Ext.MessageBox.alert('提示',"数据开始加载")         },        load:function(store,records,successFull,o){        Ext.each(records,function(item){        var childs=item.childNodes;        //alert(item.data.id);        Ext.each(childs,function(child){        if('root'!=item.data.id){        child.setId(item.data.id+'-'+child.data.id);        child.commit();        }        });        //item.commit();        });        }    }


写一个工具类(用来解析节点id):

Ext.define("app.system.util.strSplitUtil",{/** * 分割字符串,获得需要的id * @param {}  * @param {}  */getTreeNodeId:function(nodeId){var id='';if((typeof nodeId=='string')&&nodeId.constructor==String){//有时候我们id并没有-,系统会认为不是string类型var ids=nodeId.split("-");if('root'==nodeId){id=nodeId;}else{        id=ids.pop();}}        else{id=nodeId;}return id;},getTreeNodeIds:function(nodeId){//操作数组的方法 var ids=[]; var id=''; var count=0;         if((typeof nodeId=='object')&&nodeId.constructor==Array){       for(i=0;i<nodeId.length;i++){count=count+1;if((typeof nodeId[i]=='number')&&nodeId[i].constructor==Number){nodeId[i]=String(nodeId[i]);}var tempIds=nodeId[i].split("-");    ids.push(tempIds.pop());} }return ids;},getParenIds:function(nodeId){//通过输入一个id,获得它和它所有的父节点idvar ids=[];if((typeof nodeId=='string')&&nodeId.constructor==String){//有时候我们id并没有-,系统会认为不是string类型var ids=nodeId.split("-");}        else{ids[0]=ids.push(nodeId.toString());}return ids;}/*,test:function(){     alert('test');}*/});

在controller中混入工具类:

 mixins: {
  strSplitUtil:"app.system.util.strSplitUtil"
 },
可拿到id了:

var self=this

var id=self.getTreeNodeId(record.get("id"));

原创粉丝点击