学习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 相关文章推荐
JavaScript入门学习书籍推荐
Jun 12 Javascript
JavaScript 设计模式学习 Singleton
Jul 27 Javascript
购物车选中得到价格实现示例
Jan 26 Javascript
动态读取JSON解析键值对的方法
Jun 03 Javascript
Jquery调用iframe父页面中的元素及方法
Aug 23 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
基于jquery实现的鼠标悬停提示案例
Dec 11 Javascript
从零学习node.js之搭建http服务器(二)
Feb 21 Javascript
JavaScript运动框架 多值运动(四)
May 18 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
Jul 17 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
详解在Javascript中进行面向切面编程
Apr 28 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的sso单点登录实现方法
2015/01/08 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
javascript 函数速查表
2010/02/07 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
domReady的实现案例
2016/11/23 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python with语句用法原理详解
2020/07/03 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
营业员演讲稿
2013/12/30 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
初中化学教学反思
2014/01/23 职场文书
小学英语教学反思案例
2014/02/04 职场文书
高中运动会入场词
2014/02/14 职场文书
体育口号大全
2014/06/18 职场文书
学校宣传标语
2014/06/18 职场文书
资料员岗位职责范本
2015/04/13 职场文书
python单向链表实例详解
2022/05/25 Python