学习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 相关文章推荐
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
23个超流行的jQuery相册插件整理分享
Apr 25 Javascript
javascript继承之为什么要继承
Nov 10 Javascript
浅谈JavaScript数据类型及转换
Feb 28 Javascript
如何利用Promises编写更优雅的JavaScript代码
May 17 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
Dec 08 Javascript
JS实现图片预览的两种方式
Jun 27 Javascript
node使用UEditor富文本编辑器的方法实例
Jul 11 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
Dec 22 Javascript
js实现小时钟效果
Mar 25 Javascript
jquery实现上传文件进度条
Mar 26 jQuery
如何管理Vue中的缓存页面
Feb 06 Vue.js
学习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生成与读取excel文件
2016/10/14 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
jQuery的学习步骤
2011/02/23 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
详解Python中的循环语句的用法
2015/04/09 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Python内置函数delattr的具体用法
2017/11/23 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python自定义一个异常类的方法
2019/06/27 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
领导接待方案
2014/03/13 职场文书
学校募捐倡议书
2014/05/14 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
小学少先队活动总结
2015/05/08 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis