我的JS树(3)

树的一个必不可少的功能就是要支持异步取数据,因为就算构造树的算法再精妙,当数据量大的时候(如人员结构),也会出现性能瓶颈。当然,这也是我这次改动的主旨。

演示

       

        

    前台调用代码如下:

Tree.Settings.OnNodeClick = function(node) {
            alert(node[Tree.NodeProperties.Name]);
        }
        Tree.Settings.AsyncLoadUrl 
= "GetNodes.ashx";
        Tree.Settings.Async 
= true;

        
var oDiv = document.getElementById("test");
        
var nodes = eval('<%=strNodes %>');
        Tree.BuildTree(oDiv, nodes);

 

   1.OnNodeClick是点击节点名称时触发的事件,参数node会包含节点的所有属性.

       2. AsyncLoadUrl和Async是成对出现的,当设置Async时必须设置AsyncLoadUrl

       3. strNodes是初始加载的节点

      

      这样, 一棵仅用来展示数据的树就算基本完成了。

 

      接下来继续完善:

       1.UI

       2.性能优化 

 

  也请大家多多指正 

 

   Tree.js  

      下载完整包

 

标签: JS 树, js Tree
posted @ 2010-03-11 17:39 FrogTan 阅读(1941) 评论(7) 编辑 收藏

 回复 引用 查看   
#1楼[楼主] 2010-03-11 23:04 FrogTan      
演示里面的异步加载是用setTimeout模拟的过程
 回复 引用 查看   
#2楼 2010-03-12 00:51 Ylin Rain      
带复选框的树和不带复选框的树的用户的关注点不一样,如果把节点的实现逻辑分开写,我觉得在性能上可以有更大的提升空间,也就是将Node和Tree分别写成一个类。
另外,最好不要用Ajax和Utility做顶级命名空间,其实将树的逻辑打成一个大包有何不可呢,这样就避免了与其他js的命名冲突问题。
也没必要支持那狗屁的智能提示,还可能会因为编码不一致出问题。

 回复 引用 查看   
#3楼[楼主] 2010-03-12 09:20 FrogTan      
@Ylin Rain
谢谢
你说的方法我后面来试试

代码的注释仅仅就是注释,并不是打算支持智能感知,不过做的时候还真遇到了编码不一致造成的问题了,莫名其妙就出错了,最后才发现是把一行代码解析到注释里去了。。。

说实话,挺厉害的,我都做不了这么好的,给你推荐一下 +1.

 回复 引用 查看   
#5楼[楼主] 2010-03-12 10:16 FrogTan      
@吉日嘎拉&gt;不仅权限设计
多谢吉日老大。。。

 回复 引用 查看   
#6楼 2010-03-12 13:09 兆子      
大哥你这是无限扩展的吗。我怎么点了二十多个还没到头啊。
 回复 引用 查看   
#7楼[楼主] 2010-03-12 13:58 FrogTan      
@兆子
没有拉,这里的数据是模拟的,测试数据每个节点的属性HasChild都是true的,所以怎么点都会还有下一级

真正使用的时候肯定是根据数据来的,当没有子节点就将这个置为false就不能再进一步展开了

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

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

0 1683623 mP2+BXrrD2A=