扩展了一棵jquery的树插件SimpleTree,加上了json格式数据异步加载能力

转载: http://www.javaeye.com/topic/249851

学习使用jquery以来,一直没找到一棵简单并且支持异步加载的树,无奈只有自己扩展一下。jquery官方ui的treeView功能单一且不够小巧。偶然发现SimpleTree 插件发现它小巧而且支持拖拽很方便扩展,于是在simpleTree基础上做了json格式数据异步加载和树上使用的图片路径自适应的扩展。做的较为粗糙,请大家指点!

 

因为实在实际项目中使用,下面的例子是基于struts2的,除struts2环境还需要struts-json插件jsonPlugin ,对于直接使用servlet仅需要使用jsonlib中的静态方法将java List转换为json字符串。

 

修改后树的初始化方式

Js代码 复制代码
  1. $(document).ready(function(){   
  2.     simpleTreeCollection = $('#simpleTree').simpleTree({   
  3.         autoclose: true,   
  4.         animate:true,   
  5.         dataType:"json",   
  6.         url:"tree!demoTest.action"  
  7.     });   
  8.        
  9. });  

 

Html代码 复制代码
  1. <body>    
  2. <ul id="simpleTree" class="simpleTree">  
  3. </ul>  
  4. </body>  
<body> 
<ul id="simpleTree" class="simpleTree">
</ul>
</body>

 

 

修改后的初始化树的默认选项的代码

Js代码 复制代码

 

E文不好注释有点乱,请大家别介意。代码中的jsonWrap选项是转换器,有了它我们就不必在后台封装特定对象的List传出来,只有返回List中的对象具有对应于id、parentId、text的属性就可以。当然如果你界面上自定制的功能需要用到额外的数据的话,必须的在后台自己封装如下的对象的List

Java代码 复制代码
package util.tree.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class SimpleTreeNode {
	private Object id;
	private String text;
	private Object parentId;
	
	/**
	 * 仅用于需要异步读取数据的文件夹节点。当节点有子节点时,该属性不起作用。节点永远为文件夹节点 
	 */
	private boolean isFolder=false; 
	private HashMap<String, Object> attrs=new HashMap<String,Object>();
	
	public SimpleTreeNode(Object id, String text,Object parentId){
		this.id=id;
		this.text=text;
		this.parentId=parentId;
	}
	
	public SimpleTreeNode(Object id, String text, Object parentId,boolean isFolder){
		this.id=id;
		this.text=text;
		this.parentId=parentId;
		this.isFolder=isFolder;
	}
	
	public SimpleTreeNode(Object id, String text, Object parentId,boolean isFolder,HashMap<String,Object> attrs){
		this.id=id;
		this.text=text;
		this.parentId=parentId;
		this.isFolder=isFolder;
		this.attrs=attrs;
	}
	
	public void addAttribute(String key,Object value){
		this.attrs.put(key, value);
	}
	
	public Object getId() {
		return id;
	}
	public void setId(Object id) {
		this.id = id;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public Object getParentId() {
		return parentId;
	}
	public void setParentId(Object parentId) {
		this.parentId = parentId;
	}

	public boolean isFolder() {
		return isFolder;
	}

	public void setFolder(boolean isFolder) {
		this.isFolder = isFolder;
	}

	public HashMap<String, Object> getAttrs() {
		return attrs;
	}

	public void setAttrs(HashMap<String, Object> attrs) {
		this.attrs = attrs;
	}
	
	
	
}

 

js端使用异步数据生成树节点代码

Js代码 复制代码 

 

在此附上测试用的action类及struts配置

 

Java代码 复制代码
package org.wisdoor.web.util;

import java.util.ArrayList;
import java.util.List;

import org.wisdoor.web.WisdoorAction;

import util.tree.bean.SimpleTreeNode;


public class TreeAction extends WisdoorAction {
	
	private List<SimpleTreeNode> nodes=new ArrayList();
	
	
	public String demoTest(){
		for(int i=0;i<10;i++){
			nodes.add(new SimpleTreeNode(""+i,"node_"+i,null,true));
			for(int n=0;n<5;n++){
				nodes.add(new SimpleTreeNode((""+i)+"_"+n,"node_"+i+"_"+n,""+i));
			}
		}
		return SUCCESS;
	}
	

	public List<SimpleTreeNode> getNodes() {
		return nodes;
	}

	public void setNodes(List<SimpleTreeNode> nodes) {
		this.nodes = nodes;
	}
	
	
}

 

 

Xml代码 复制代码
  1. <!-- Tree -->  
  2. <package name="tree" extends="json-default">  
  3. <action name="tree" class="org.wisdoor.web.util.TreeAction" >  
  4. <result type="json">  
  5. <param name="ignoreHierarchy">  
  6.                     false   
  7. </param>  
  8. </result>  
  9. </action>  
  10. </package>  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值