先放在这,有时间再说重写后实现的功能
Ext.ux.bpm.TreeLoader = Ext.extend(Ext.tree.TreeLoader,{
rootId:"0",parseJsonTree:function(mixed,pid){
var childrens = mixed.filterBy(function(item){
if(item['pId']==pid || typeof item['pId'] == 'undefined'){
return true;
}
},this).items;
Ext.each(childrens,function(item,index){
var nodes = this.parseJsonTree(mixed,item.id);
if(nodes && nodes.length){
item.children = nodes;
}
},this);
return childrens;
},
createNode : function(attr){
attr.text = attr.name;
attr.leaf = !(attr.children && attr.children.length);
attr.expanded = attr.open;
return Ext.ux.bpm.TreeLoader.superclass.createNode.call(this,attr);
},
//查找一颗树的根节点
findRootId:function(objs){
var rootId;
for(var i=0;i<objs.length;i++){
var obj = objs[i];
var same = false;
for(var j=0;j<objs.length;j++){
var obj2 = objs[j];
if(obj.pId == obj2.id){
same = true;
break;
}
}
if(same==false){
rootId = obj.pId;
}
}
return rootId;
},
processResponse : function(response, node, callback){
var json = response.responseText;
try {
var o = eval("("+json+")");
var mixed = new Ext.util.MixedCollection(false,function(o){return o.id});
mixed.addAll(o);
this.rootId = this.findRootId(o);
o = this.parseJsonTree(mixed,this.rootId);
node.beginUpdate();
for(var i = 0, len = o.length; i < len; i++){
var n = this.createNode(o[i]);
if(n){
node.appendChild(n);
}
}
node.endUpdate();
if(typeof callback == "function"){
callback(this, node);
}
}catch(e){
this.handleFailure(response);
}
},
initComponent : function(){
Ext.ux.bpm.TreeLoader.superclass.initComponent.apply(this,arguments);
}
});
后台:如果用后果做了树,就不需要这个treeloader
@SuppressWarnings("rawtypes")
private List<Map> pearamsTree(List<Map> roots,Integer rootId){
//过滤出所有的根节点
List<Map> rootsNow = new ArrayList<Map>();
List<Map> otherNodes = new ArrayList<Map>();
for (Map cate : roots) {
if(cate.get("categoryPid")==rootId){
rootsNow.add(cate);
}else{
otherNodes.add(cate);
}
}
for(Map cate :rootsNow){
List<Map> lm = this.pearamsTree(otherNodes,Integer.parseInt(cate.get("id").toString()));
if(lm!=null && lm.size()>0){
cate.put("children", lm);
}else{
cate.put("left", true);
}
}
return rootsNow;
}
下面是使用方式
if (!Global.categoryLoader) {
Global.categoryLoader = new EasyJF.Ext.MemoryTreeLoader({
iconCls : 'lanyo-tree-node-icon',
varName : "Global.DEPT_NODES",
url : "category_getTree?pageSize=-1&treeData=true&all=true",
listeners : {
'beforeload' : function(treeLoader, node) {
treeLoader.baseParams.id = (node.id.indexOf('root') < 0 ? node.id : "");
if (typeof node.attributes.checked !== "undefined") {
treeLoader.baseParams.checked = false;
}
}
}
});
}
{
fieldLabel : '父分类',
name : 'category.categoryPid.id',
xtype : "treecombo",
hiddenName : "category.categoryPid.id",
displayField : "title",
valueField : "id",
tree : new Ext.tree.TreePanel({
autoScroll : true,
rootVisible : false,
root : new Ext.tree.AsyncTreeNode({
id : "root",
text : "部门",
expanded : true,
iconCls : 'treeroot-icon',
loader : Global.categoryLoader
})
}),
listeners : {
scope : this,
select : function(combo, record, index) {
this.operateParentType = record.attributes.type;
}
}
}