学习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 相关文章推荐
window.open以post方式将内容提交到新窗口
Dec 26 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
Dec 29 Javascript
javascript制作的简单注册模块表单验证
Apr 13 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
Sep 17 Javascript
Vue.js快速入门教程
Sep 07 Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 Javascript
vue params、query传参使用详解
Sep 12 Javascript
npm scripts 使用指南详解
Oct 08 Javascript
vue中组件的过渡动画及实现代码
Nov 21 Javascript
Laravel admin实现消息提醒、播放音频功能
Jul 10 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 Javascript
利用 JavaScript 构建命令行应用
Nov 17 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中的时间显示
2007/01/18 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
php查询内存信息操作示例
2019/05/09 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
Vuex提升学习篇
2018/01/11 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
小学语文国培感言
2014/03/04 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
诚信承诺书
2015/01/19 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python