前几天遇到这个问题,是人员的管理,一个组织下面有其他子组织,一个人可以属于多个组织。这样的情况出现了同个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,获得它和它所有的父节点id
var 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"));