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

2016-02-19 10:19 13 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点),希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - Web开发 】

下面将介绍如何异步取一棵树的所有节点,具体做法与官方同步取节点有很大不同,尤其在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 
…… 

来源:http://www.tulaoshi.com/n/20160219/1594207.html

延伸阅读
标签: Web开发
原文地址 文章日期:2006/9/26 新版的GIRD可以支持远程数据了。分页和远程排序的设置是通俗易懂的,另外一些常用的自定义的参数我会在这篇贴子中说明一下。新论坛的界面(在建设中)就是一个分页和远程排序的好例子,而本文的代码均来自那个例子。 新方法和属性 利用LoadableDatatModel对象(XMLDataModel和JSONDataModel的父类)实现分...
恶露经验分享 图钉问: 你好,我是产妇,第六天,就没有来那个恶露,现在是第八天,又来好多好多我今天中午喝了两大碗鱼头汤请问这跟喝鱼头汤有关系吗 图老师答: 这个与鱼汤没有关系的,恶露需要48天才能干净的,暂时没有了,是短暂的 产后恶露不净的饮食疗法 制作: 芪归炖鸡汤 1、用料:小母鸡1只(约1000克),黄...
在前面的图形绘制中,我们已经接触到了节点,初步了解到矢量图形的形状是由节 点控制的,并能简单的控制节点改变图形的形状。 控制点 是节点上的用于调节曲线形状的特殊的点。由于曲线的形状是由曲线上的节点及节 点上的控制点所决定的,因此通过移动节点和调节节点的控制点,可以改变曲线...
标签: PHP
PHP中的型别 本章重点 ◆ 了解PHP的八种型别Boolean、 ◆ NULL、string、array、object与、resource ◆ 建立、读取、显示输出与操控不同型别的物件 从某种型别转换成其它型别 所有程式设计语言都有某些型别系统,且来指定可出现在程式中的数值种类。这些不同的型别常对应于电脑记忆体中不同层级的表示,在很多情况下程式设...
标签: PHP
字串中的换行符号 虽然PHP为换行符号提供了一个跳脱转义序列( ),但让你知道能够在字串中间从字面上加入换行符号也不错,PHP同样能够处理这种形式。在建立HTML字串时这样会很方便,因为浏览器会忽略( )换行符号,因此可以用换行符号格式化字串,使得PHP程式码行更短:   在文字编辑器中,在前两行尾端隐藏按「Enter...

经验教程

125

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部