您的位置:首页 > Web前端 > JavaScript

extjs递归算法生成树

2014-02-28 13:01 204 查看
java中的代码,与数据库层主要是两个方法,一个是查询节点,一个是查询子节点。然后形成树形结构,这里主要重写了tree的store,让树子节点加载更多的信息,下面是java中的代码。
/**
* 递归算法解析成树形结构
*
* @param cid
* @return
* @author jiangyi
*/
public JSONTreeNode recursiveTree(String cid,String index_name,List areadimensions,List timedimensions) {
//当前节点信息
List list = categoryService.queryCategory(cid);
JSONTreeNode node = new JSONTreeNode();
//子节点信息
List childTreeNodes = categoryService.hasChildNode(cid);
//这个节点下所有指标
List treelist = indexService.queryIndexTreeByDimednsionName(null,getTreeLeaf(cid),index_name);
if(list!=null&&list.size()>0&&treelist!=null&&treelist.size()>0){
DM_IND_CATEGORY_INFO DM_IND_CATEGORY_INFO = (DM_IND_CATEGORY_INFO)list.get(0);
node.setId(DM_IND_CATEGORY_INFO.getUuid());
node.setText(DM_IND_CATEGORY_INFO.getCategory_name()+treelist.size());
if (childTreeNodes!=null&&childTreeNodes.size()>0) {
node.setLeaf(false);
}else{
node.setLeaf(true);
}
//遍历子节点
if(childTreeNodes!=null){
for(int i=0;i<childTreeNodes.size();i++){
DM_IND_CATEGORY_INFO child = (DM_IND_CATEGORY_INFO)childTreeNodes.get(i);
JSONTreeNode n = recursiveTree(child.getUuid(),index_name,areadimensions,timedimensions); //递归
if(!"0".equals(n.getDescription())){
node.getChildren().add(n);
}
}
}
}else{
node.setDescription("0");
}
//加一层维度信息
if(node.isLeaf()){
node.setLeaf(false);
for(int i=0;i<areadimensions.size();i++){
boolean flag = false;
DM_IND_DIMENSION_DETAIL areadimension = (DM_IND_DIMENSION_DETAIL)areadimensions.get(i);
JSONTreeNode areanode = new JSONTreeNode();
areanode.setId(node.getId()+areadimension.getUuid());
areanode.setLeaf(false);
int size = 0;
for(int j=0;j<timedimensions.size();j++){
DM_IND_DIMENSION_DETAIL timedimension = (DM_IND_DIMENSION_DETAIL)timedimensions.get(j);
//增加指标
String dimension_name = timedimension.getUuid() + "-" + areadimension.getUuid();
List treelist1 = indexService.queryIndexTreeByDimednsionName(dimension_name,node.getId(),index_name);
if(treelist1!=null&&treelist1.size()>0){
size += treelist1.size();
flag = true;
JSONTreeNode timenode = new JSONTreeNode();
timenode.setId(node.getId()+areadimension.getUuid()+timedimension.getUuid());
timenode.setText(timedimension.getDimension_name()+treelist1.size());
timenode.setLeaf(false);
for(int k=0;k<treelist1.size();k++){
JSONObject json = (JSONObject)treelist1.get(k);
JSONTreeNode indexnode = new JSONTreeNode();
indexnode.setId(node.getId()+"-"+json.getString("sub_index_id"));
indexnode.setText(json.getString("index_name"));
indexnode.setLeaf(true);
timenode.getChildren().add(indexnode);
}
areanode.getChildren().add(timenode);
}
}
areanode.setText(areadimension.getDimension_name()+size);
//判断这个分类下面没有指标
if(flag){
node.getChildren().add(areanode);
}
}
}
return node;
}
/**
* 得到这个节点下面的所有的叶子节点
* @param cid
* @return
* @author jiangyi
*/
public List getTreeLeaf(String cid) {
List relList = new ArrayList();
relList.add(cid);
List list = categoryService.queryCategory(cid);
if(list!=null&&list.size()>0){
DM_IND_CATEGORY_INFO DM_IND_CATEGORY_INFO = (DM_IND_CATEGORY_INFO)list.get(0);
List childTreeNodes = categoryService.hasChildNode(cid);
if (childTreeNodes!=null&&childTreeNodes.size()>0) {

}else{
relList.add(DM_IND_CATEGORY_INFO.getUuid());
}
//遍历子节点
if(childTreeNodes!=null){
for(int i=0;i<childTreeNodes.size();i++){
DM_IND_CATEGORY_INFO child = (DM_IND_CATEGORY_INFO)childTreeNodes.get(i);
List n = getTreeLeaf(child.getUuid()); //递归
relList.addAll(n);
}
}
}
return relList;
}
js中就比较简单了。
var categoryStore = Ext.create('Ext.data.TreeStore', {
autoLoad : false,
proxy : {
type : 'ajax',
url : eastcom.baseURL+'/inas_kpimanage_index/queryIndexTree',
reader : {
type : 'json'
},
actionMethods : {
read : 'POST'
}
}
});
var categoryTree = Ext.create('Ext.tree.Panel', {
id : 'categoryTree',
tbar:Ext.create('Ext.toolbar.Toolbar',{items:['指标名称','->',queryIndexAction]}),
rootVisible : false,
useArrows : true,
store : categoryStore,
listeners : {
'itemclick' : function(view, record, items, index, e) {
var obj = record;
var array = obj.data.id.split("-");
var sub_index_id = array[1];
if(obj.data.leaf == true){
Ext.getCmp('id_sub_index_id').setValue(obj.data.id);
Ext.Ajax.request({
url : eastcom.baseURL + '/inas_kpimanage_index/querySubIndex',
method : 'POST',
params : {
sub_index_id : sub_index_id
},
success : function(form, action) {
var result = Ext.JSON.decode(form.responseText);
Ext.getCmp('addDbMetaAction').enable();
var o = result.data;
//列表中显示信息
Ext.getCmp('id_sub_index_id').setValue(sub_index_id);
Ext.getCmp('id_index_last_version').setValue(o.index_last_version);
if(o.time_delay == ''){
Ext.getCmp('id_time_delay').setValue(0);
}else{
Ext.getCmp('id_time_delay').setValue( o.time_delay);
}
Ext.getCmp('id_delay_desc').setValue( o.delay_desc);
if(o.is_calculation == '1'){
Ext.getCmp('id_index_algorithm').show();
Ext.getCmp('id_is_calculation').setValue( o.is_calculation);
Ext.getCmp('id_index_algorithm').setValue( o.index_algorithm);
}else{
Ext.getCmp('id_index_algorithm').hide();
Ext.getCmp('id_is_calculation').setValue('0');
}
var dbdatalabelshow = o.dbdatalabel;
var store= Ext.getCmp('rightGridPanel').getStore();
store.removeAll();
if(dbdatalabelshow != null && dbdatalabelshow != ''){
var array = dbdatalabelshow.split(';');
for(var i=0;i<array.length;i++){
var array1 = array[i].split(',');
var r = Ext.create('gridtableModel', {
uuid : array1[0],
table_name: array1[1],
field_id: array1[2]
});
store.insert(0, r);
}
}
}
});
}
}
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: