学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)


Posted in Javascript onMarch 10, 2007

下面将介绍如何异步取一棵树的所有节点,具体做法与官方同步取节点有很大不同,尤其在json的id属性上,下面是我一些摸索,可能不是最佳方案,有待大家一起研究。
异步取节点的思路是这样的:
1、先定义一个初始化节点(也可以不定义,看个人需求)
2、yui-ext根据该节点id请求服务器,获得子节点各属性
3、循环
特点:可以在上一级目录中,在服务器端预先将该节点是否有子节点读好(json中的isLeaf属性),虽然但数据库将多承担一些压力,但用个count(*)不会造成太大负担(除非查询条件异常复杂),也可以不读,即把所有isLeaf设置为false。
问题:
1、目前还无法进行reload,即每次打开节点都重新读取一次
2、样式还有些问题,无法通过node. childNodes[i]设置子节点的style,所以无法改变最后一级元素的style(也许是通过别的途径改变style的?)
示例:
先给出一段js代码,可以结合官方的demo(http://yui-ext.com/playpen/yui-ext.0.40/examples/tree/reorder.html)看看:
//定义根id的变量

var rootId = 1;  
var TreeTest = function(){  
    // shorthand  
    var Tree = YAHOO.ext.tree;      return {  
        init : function(userName){  
            var tree = new Tree.TreePanel('detailTree', {  
                animate:true,   
                //这个dataUrl是初始化树所用的url,你也可以不写或定义一个静态json文件,还可以什么都不写全部依赖于第二个url自动产生,视具体需求而定  
                loader: new Tree.TreeLoader({dataUrl:'calendarDetail.do?method=getDayDetailJSON&parentId='+rootId}),  
                enableDD:true,  
                containerScroll: true  
            });  
            // set the root node  
            var root = new Tree.AsyncTreeNode({  
                text: 'yui-ext',   
                draggable:false,   
                id:rootId  
            });  
            tree.setRootNode(root);  
            //根据当前节点id,动态拼出请求服务器的路径  
            //每产生一个节点,指向一个事件的引用,将新建loader.dataUrl(具体事件的机制还需要再研究)  
            //注意调用函数是beforeload  
            tree.on('beforeload', function(node){   
                tree.loader.dataUrl = 'calendarDetail.do?method=getDayDetailJSON&parentId='+node.id;  
            });  
              
            //这里演示一个自定义json的用法(description为自定义json的key)  
            //以及如何定义某节点的style(node.ui.textNode.style.title)  
            //具体可以看ui这个类  
            tree.on('beforeexpand', function(node){   
                node.ui.textNode.style.title = ‘red';  
                alert(node.attributes.description);  
            });                                          
            // render the tree  
            tree.render();  
            // false for not recursive (the default), false to disable animation  
            root.expand();  
        }  
    };  
}(); 

同时再分析一个json:
[{"text":"衣服类",    
"id":"5",     //注意:这里是该节点的id,拼连接时要用到,与官方的json有所不同   
"leaf":true,  
"cls":"file",  
"description":"这里是衣服类"}]   //自定义只需要这样就可以了   
给出java产生json的代码逻辑片断:   
……  
//list为由传入的id所求的category集合  
List list=   
findBy("parentId", new Long(parentId.toString()));  
StringBuffer JSONStr = new StringBuffer();  //声明json  
JSONStr.append("[");  for(CostCategory i : list){    
    boolean isLeaf = isLeaf(i.getId());  //isLeaf()为判断是否有以该id为parentId的节点,具体没有给出  
    String icon = isLeaf?"file":"folder";  
    String description = i.getCategoryDescription()==null?"":i.getCategoryDescription();  
    //{"text":"treedata.jsp","id":"treedata.jsp","leaf":true,"cls":"file"},  
    JSONStr.append("{\"text\":\""+  
            i.getCategoryName()+"\",\"id\":\""+  
            i.getId()+"\",\"leaf\":"+  
            isLeaf+",\"cls\":\""+  
            icon+"\",\"description\":\""+  
            description+"\"},");  
}  
JSONStr.deleteCharAt(JSONStr.lastIndexOf(","));  
JSONStr.append("]");  
System.out.println(JSONStr);  
out.print(JSONStr);   //输出json  
…… 
Javascript 相关文章推荐
用js实现控制内容的向上向下滚动效果
Jun 26 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jquery 判断是否支持Placeholder属性的方法
Feb 07 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
12个非常有用的JavaScript技巧
May 17 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
js 实现复选框只能选择一项的示例代码
Jan 23 Javascript
详解如何在微信小程序中愉快地使用sass
Jul 30 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
Aug 27 Javascript
学习YUI.Ext 第七天--关于View&JSONView
Mar 10 #Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 #Javascript
学习YUI.Ext第五日--做拖放Darg&Drop
Mar 10 #Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 #Javascript
学习YUI.Ext 第三天
Mar 10 #Javascript
学习YUI.Ext 第二天
Mar 10 #Javascript
学习YUI.Ext基础第一天
Mar 10 #Javascript
You might like
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
Python简单进程锁代码实例
2015/04/27 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
python实现贪吃蛇小游戏
2020/03/21 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python内存管理机制原理详解
2019/08/12 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
高中毕业自我鉴定
2013/12/13 职场文书
党建工作经验交流材料
2014/05/25 职场文书
个人剖析材料范文
2014/09/30 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
MySQL索引失效场景及解决方案
2022/07/23 MySQL