学习YUI.Ext 第六天--关于树TreePanel(Part 1)


Posted in Javascript onMarch 10, 2007

学习YUI.Ext 第五天--关于树TreePanel(Part 1) 
效果演示:http://www.ajaxjs.com/yuicn/demos/order_tree.asp
    树组件是YUI.Ext 0.40 新增的组件。虽然YUI已经自带有TREE VIEW的组件,但JACK还是决定重新开发。具体原因在http://www.ajaxjs.com/yuicn/article.asp?id=20070245(翻译文章)或http://www.jackslocum.com/blog/2006/12/29/preview-drag-and-drop-enhancements-and-the-new-treepanel/ (原文) 
一、加载一个同步Tree:

var TreeTest = function(){  
var Tree = YAHOO.ext.tree;// 快捷方式  
return {  
    init : function(){  
    var tree = new Tree.TreePanel('tree_div', {//需要一个tree_div的holder  
    animate:true, //是否动画  
    loader: new Tree.TreeLoader({dataUrl:'get_nodes.asp'}), //调用一个JSON  
    enableDD:false,// 是否支持拖放  
    containerScroll: true  
});  
// 设置根节点  
var root = new Tree.AsyncTreeNode({  
text: 'Frank的作品',  //根节点文字  
draggable:false, //根节点是否可拖放  
id:'source'  
});  
tree.setRootNode(root);  
// 渲染 tree  
tree.render(false,false);  
// false for not recursive (the default), false to disable animation  
root.expand(false,false);  
}  
};  
}();  
YAHOO.ext.EventManager.onDocumentReady(TreeTest.init, TreeTest, true);

通过XHR调用这个get_nodes.asp文件,假设服务器返回这样一个JSON(有关JSON的介绍:http://www.json.org/json-zh.html):
[{
"text":"yui-ext.js","id":"\/yui-ext.js","leaf":true,"cls":"file"
} ,{
"text":"yui-ext-1118.php","id":"\/yui-ext-1118.php","leaf":true,"cls":"file"
} ,{
"text":"yui-ext-1228.php","id":"\/yui-ext-1228.php","leaf":true,"cls":"file"
} ,{
"text":"build","id":"\/build","cls":"folder"
} ,{
"text":"source","id":"\/source","cls":"folder"
} ,{
"text":"yui-ext-1123.php","id":"\/yui-ext-1123.php","leaf":true,"cls":"file"
} ,{
"text":"yui-ext-1203.php","id":"\/yui-ext-1203.php","leaf":true,"cls":"file"
} ]
  Server端JSON的输出(ASP JScript)  
var goods = new dbOpen();  
goods.GetSQL ="select * from goodsbigclass";  
with(goods){  
    GetRS(1);  
    var str="";  
    str+="[";  
    do{  
        str+='{"text":"'+rs("BigClassName")+'","id":"\/yui-ext.js","leaf":true,"cls":"file","href":"?b_id='+rs("BigClassID")+'"},';  
        rs.MoveNext();  
    }while(!rs.EOF);  
    str+="]";  
    Response.Write(str);  
    Close();  
}  
goods= null; 

解释:
“text”-->显示的文本
"id"-->id值 
“leaf”-->Boolean值,如果“叶子”是真的话,则不能包含子节点Children nodes 
"cls"-->选用的样式,通常在这里选定图标
”href“-->指定的url,还有一个”hrefTarget“的属性
另外,除了以上的属性,您还可以在JSON加入任何的属性,作为节点的属性,见Jack原话:
The href attribute is called "href", there's also an "hrefTarget" attribute. For capturing node clicks, you can listen on individual nodes or you can listen for "click" on the tree which will pass you the node that was clicked. FYI, you can put any attributes you want in the json config for the node and it will be available as node.attributes. FAQ.4会继续解释这个问题。
FQA常见问题:
1.Tree支持XML数据交换吗?
A:暂不支持,据FOURM上的话,以后会提供支持,见:
can I use xml instead of json for sending nodes hirerachy ?
Correct me if I'm wrong but I think the answer is no here. But that doesn't mean it won't be supported later on. 
2.我想用单击代替双击展开子节点,可以吗?
A:可以,见: 
tree.on('click', function(node){ 
    if(!node.isLeaf()){ 
        node.toggle(); 
    } 
}); 
3.事件处理的几种情形:
A: a.当加入某个节点时,为其增加事件 
tree.on('append', function(tree, node){ 
     if(node.id == 'foo'){ 
         // 这里加入你的事件(如click)侦听器(addListener())
     } 
});b.针对某个节点的单击事件 
tree.on('click', function(node){ 
     if(node.id == 'foo'){ 
         // do something 
     } 
});c.针对某个区域(集合)的事件 
// fires any time the selection in the tree changes 
tree.getSelectionModel().on('selectionchange', function(sm, node){ 
     if(node && node.id == 'foo'){ 
         // do something 
     } 
}); 
4.如何获取JSON中的自定义字段(或称作参数 parameters)
A:JSON对象已经被构建函数 construction传递到TreeNode中,作为node.attributes 出现,所以调用属性node.attributes 便可获取。详见:http://www.yui-ext.com/forum/viewtopic.php?t=2253 
tree.on('click', function(node){ 
    if(!node.isLeaf()){ 
        node.toggle(); 
    } 
});
Javascript 相关文章推荐
js 解决“options为空或不是对象”
Dec 22 Javascript
JQuery 国际象棋棋盘 实现代码
Jun 26 Javascript
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
Mar 12 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
Sep 18 Javascript
用JS中split方法实现彩色文字背景效果实例
Aug 24 Javascript
JavaScript调试之console.log调试的一个小技巧分享
Aug 07 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
vue项目从node8.x升级到12.x后的问题解决
Oct 25 Javascript
JavaScript 生成唯一ID的几种方式
Feb 19 Javascript
介绍一下28个JS常用数组方法
May 06 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
JavaScript触发器详解
Mar 10 #Javascript
又一个图片自动缩小的JS代码
Mar 10 #Javascript
You might like
Linux编译升级php的详细方法
2013/11/04 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
javascript中Object使用详解
2015/01/26 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
python实现抖音视频批量下载
2018/06/20 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
巴西购物网站:Submarino
2020/01/19 全球购物
市场部管理制度
2014/02/02 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
毕业生就业意向书
2014/04/01 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
杨善洲观后感
2015/06/04 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers