【jq】 -- easyui tree的使用之state属性慎用

这个属性是为了控制树的节点是否展开。当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');
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值