jquery EasyUI 异步树 treeview,我所做的真正意义上的异步树(单选)

首先,写这篇文章的目的,在于帮助更多人更加轻松地实现客户端Treeview,程序员的时间是宝贵的,在客户端,你可能只需要几行代码就能完全搞定这棵树。

EasyUI易用灵活,但可惜说明文档太简单,网上不少的一些所谓异步树,名为异步,实则是一次性加载了全部的树内容,这样在构建一棵比较大的树的时候,可能会造成效率上的严重影响.

    我们的目标,一般是:点击某节点前的"展开"图标====加载该节点下的子节点====下次展开,不用加载,直接展开;点击节点的文字,选定内容,做我们所要做的事情.效果如下图:

    于是行动开始,首先,我们要加载EasyUI的核心文件及资源文件,HTML具体代码如下---

 

代码
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 
 3 <html xmlns="http://www.w3.org/1999/xhtml" >
 4 <head runat="server">
 5     <title>Untitled Page</title>
 6     <link rel="stylesheet" href="easyui/themes/default/easyui.css" />
 7  <link rel="stylesheet" href="easyui/themes/icon.css" />
 8  <script type="text/javascript" src="easyui/jquery-1.4.2.min.js"></script>
 9     <script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
10     <script type="text/javascript">   
11 
12     $(function(){
13             $('#tt2').tree({   
14                 checkbox: false,   
15                 url: '/common/GetGoupJsonByPid.ashx?pid=0',   
16                 onBeforeExpand:function(node,param){
17                     $('#tt2').tree('options').url = "/common/GetGoupJsonByPid.ashx?pid=" + node.id;// change the url                       
18                     //param.myattr = 'test';    // or change request parameter
19                 },               
20                 onClick:function(node){             
21                     alert(node.id); 
22                 }   
23             });   
24         }); 
25     </script>
26 </head>
27 <body>
28     <form id="form1" runat="server">
29     <div style="width:150px;">
30         <ul id="tt2">
31         </ul>
32     </div>
33     </form>
34 </body>
35 </html>

 

 大家可以看到,这个代码已经是相当简单了,然后, 我们要做的是服务器端的代码返回工作,其实也很简单,核心代码如下:

 

代码
 1             int parentId = -1;//默认为-1,如果请求参数不正确,将不返回任何值
 2             string resultStr = string.Empty;
 3             if (!string.IsNullOrEmpty(context.Request.QueryString["pid"]))
 4             {
 5                 Int32.TryParse(context.Request.QueryString["pid"], out parentId);
 6             }
 7             if (parentId >= 0)
 8             {
 9 ........//此处省略得到数据列表的代码
10                     resultStr = "";
11                     resultStr += "[";
12                     foreach (数据类 item in 数据集List<>)
13                     {
14                         resultStr += "{";
15                         resultStr += string.Format("\"id\": \"{0}\", \"text\": \"{1}\", \"iconCls\": \"icon-ok\", \"state\": \"closed\"", item.Id.ToString(), item.TxtName);
16                         resultStr += "},";
17                     }
18                     resultStr = resultStr.Substring(0, resultStr.Length - 1);                   
19                     resultStr += "]";
20             }
21 
22 
23             //最后返回json数据
24             context.Response.Write(resultStr);
25             

 

 

请注意,以上的服务器端代码,请根据具体数据结构情况进行修改.

 

好了,这样,我们的工作就完成了.是不是很简单(另一个更简单,更好的Tree插件jquery.simple.tree).具体实现中,还可以根据情况进行多选的设置.

EasyUI代码下载"http://jquery-easyui.wikidot.com/download",我这里用的版本是1.2

如果哪位兄弟用了觉得OK,可以留言,我们一起探讨.

posted @ 2010-08-20 11:41 活跃的毛虫 阅读(7819) 评论(15) 编辑 收藏

 回复 引用 查看   
#1楼 2010-08-20 15:55 黑色      
吃饱撑着,他本来就支持展开自动异步去取数据
简单的很直要给他设置个URL就行了

 回复 引用 查看   
#2楼[楼主] 2010-08-20 16:17 菜鸟毛      
简单,这正是我要告诉大家的,不然怎么叫EASYUI呢,但现实很多的教程,包括我们园子里的教程,实际上带我们走了一段弯路.而且达不到所要的效果.
EasyUi的功能还有很多,稍加研究,我们便可以轻松地做一些轻量级的应用,何乐而不为呢.
之前我甚至还自己手工写了一个类似的TreeView,像这种简单的东西,我希望越来越多的人能直接上手就用之,而不是重复轮子,这样我们的主要精力可以放在更重要的业务上.

 回复 引用 查看   
#3楼 2010-08-21 12:01 Vincent.Q      
嗯,上面这串代码,在官方代码里好像没有的
 回复 引用 查看   
#4楼 2010-11-30 23:03 托冰      
谢谢 LZ 提供思路 。。。
 回复 引用 查看   
#5楼 2010-12-22 10:46 cqwang07      
怎么运行起来什么数据都没有咯,resultStr的值已经是我想要的了,但是好像并没有去执行onBeforeExpand这个函数。望楼主解答一下。
 回复 引用 查看   
#6楼 2010-12-29 08:42 xiaobaihaohaode      
我遇到了和楼上一样的情况,onBeforeExpand没有被执行呢。楼主帮忙解释一下吧
 回复 引用 查看   
#7楼[楼主] 2011-01-24 09:38 活跃的毛虫      
请问你用的浏览器版本是哪种,说真的这东西的兼容性还不够高.经常在IE6,7,8,FF之间顾此失彼.问题较多的当属IE8
 回复 引用 查看   
#9楼 2011-09-05 15:31 三角函数      
onBeforeExpand不执行,其实,是版本不对,在EasyUI 1.20后,才有这个方法。用最新的版本 就可以了。我测试过了是可以的。
 回复 引用 查看   
#10楼[楼主] 2011-09-06 21:45 活跃的毛虫      
@三角函数
谢谢三角函数兄提供的答案,不过EasyUI的兼容性并没有想象中的那么好.并且体积有点大,这个可以用来做内网办公之用.至于商业应用,虽然可以抽取其中的某些代码来减肥,但因为其兼容性原因让我还是决定用其它的JQ插件.或者一些小的功能块自己直接写.

 回复 引用 查看   
#11楼 2011-09-07 12:17 三角函数      
我昨天也是为了找一个tree的解决方案,昨天找到了一个LigerUI的Jquery框架,它的设计思路就是尽量保持每一个组件的独立性。单独拿Tree用也是很好用的。
最好的地方就是它支持Id,Pid这种父子节点的线性结构数据的直接初始化。
http://www.ligerui.com/这个是官方网站。希望能帮助要使用的朋友。如果有什么疑问,可以一起讨论。

 回复 引用   
#12楼 2011-09-24 10:54 sjjsq[未注册用户]
onBeforeExpand:function(node,param){alert(0);
$(this).tree('options').url = "../dch/gnodes.action?id="+node.id;// change the url
alert($(this).tree('options').url); },
这句话好像执行了 却进入不了action是什么原因啊;
上面的url:../dch/gnodes.action?id=0;都对了的啊
版本是最新的 啊

 回复 引用 查看   
#13楼[楼主] 2011-09-26 10:10 活跃的毛虫      
@sjjsq
最新的EsayUi,看看它支持的JQuery版本是什么,这些版本必须配套.

 回复 引用 查看   
#14楼 2011-12-17 22:01 aspirant      
感谢楼主的分享,这个异步树我在网上找了很多时间,总是找不到,现在终于在楼主的带领下做了出来,
 回复 引用 查看   
#15楼 2012-02-09 17:06 彷徨的狮子      
楼主,能不能实现点击父节点,获取到父节点的id,然后根据父节点的id查询子节点,并绑在相应的父节点下面啊?
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1804387 U+Fd+C/TAnk=