学习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 指导方针
Apr 05 Javascript
实现JavaScript中继承的三种方式
Oct 16 Javascript
JavaScript中数组对象的那些自带方法介绍
Mar 12 Javascript
JQuery写动态树示例代码
Jul 31 Javascript
jQuery mobile 移动web(4)
Dec 20 Javascript
jQuery AjaxUpload 上传图片代码
Feb 02 Javascript
jQuery实现查找链接文字替换属性的方法
Jun 27 Javascript
bootstarp modal框居中显示的实现代码
Feb 18 Javascript
vue-form表单验证是否为空值的实例详解
Oct 29 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 Javascript
微信小程序纯文本实现@功能
Apr 08 Javascript
vue实现的多页面项目如何优化打包的步骤详解
Jul 19 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+dbfile开发小型留言本
2006/10/09 PHP
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
php模板函数 正则实现代码
2012/10/15 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
JS代码放在head和body中的区别分析
2011/12/01 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JS交换变量的方法
2015/01/21 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Django中使用Celery的方法示例
2018/11/29 Python
创建Django项目图文实例详解
2019/06/06 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
2014年中秋节活动总结
2014/08/29 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
爱心捐款感谢信
2015/01/20 职场文书
六年级情感作文之500字
2019/10/23 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
Python中的tkinter库简单案例详解
2022/01/22 Python