这个属性是为了控制树的节点是否展开。当state为closed时为关闭状态。state为open时为展开状态。
需求:
一棵树在显示时是默认不展开状态
后台自己构造了TreeNode树结构。如下:
/*
* Copyright 2015-2018 dangdang.com, all rights reserved.
*
* History:
* ------------------------------------------------------------------------------
* Date | Who | What
* 2015年10月19日 | hexinjs | create the file
*/
package com.dangdang.wms.common.model;
import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
*
* 树型结点
*
* <p>
* 用于配合easyui显示树型数据。因为easyui的tree、combotree的值域、文本域必须为id、text。
* </p>
*
* @author hexinjs
*
*/
public class TreeNode implements Serializable {
private static final long serialVersionUID = 1L;
public static String STATE_OPEN = "open";
public static String STATE_CLOSED = "closed";
private String id; // 值域
private String text; // 文本域
/**
* 上级结点ID
* 为了使树能够json化,这里将parent设置为parentId,而不是parentTreeNode
* 使用parentTreeNode会导致json引用循环
* 对树进行操作时,可以根据ID,将所有树形结点构建成以id为key,结点本身为value的Map,从而实现获取上级、下级的操作
*/
private String parentId;
// private String state = STATE_CLOSED;
private String state = STATE_OPEN;
private List<TreeNode> children = new LinkedList<TreeNode>(); // 子结点
private Map<String, Object> attr = new HashMap<String, Object>(); // 其他属性
public TreeNode() {
}
public TreeNode(String id, String text) {
this.id = id;
this.text = text;
}
public TreeNode(String id, String text, String parentId) {
this.id = id;
this.text = text;
this.parentId = parentId;
}
public TreeNode(String id, String text, String parentId, String state) {
this.id = id;
this.text = text;
this.parentId = parentId;
this.state = state;
}
public String getId() {
if (id == null) {
return "";
}
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
public Map<String, Object> getAttr() {
return attr;
}
public void setAttr(Map<String, Object> attr) {
this.attr = attr;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
// public String getState() {
// return state;
// }
//
// public void setState(String state){
// this.state = state;
// }
}
针对以上结构,我们在给树赋值时,如果直接setState("closed")时,其所有子节点都会设置成closed。会造成如下后果:
如图:当前子节点重新加载,不停循环。如果能够根据需求做到各级节点分别close的话,可以尝试使用该属性,如果无法判断,则慎重,不建议用state。
以上问题若想正常显示,则state不设定值,即为空 或者设定为open 即可正常显示,但可能无法满足你的需求。慎用。
为了避免如上问题的发生。可以尝试使用如下方案:
加载完毕后,调用折叠方法
onLoadSuccess:function(){
$('#areaTree').tree('collapseAll');
}