学习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 相关文章推荐
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
javascript实现回车键提交表单方法总结
Jan 10 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
May 17 Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
May 28 Javascript
vue设置一开始进入的页面教程
Oct 28 Javascript
通过实例了解JS执行上下文运行原理
Jun 17 Javascript
微信小程序picker组件两列关联使用方式
Oct 27 Javascript
design vue 表格开启列排序的操作
Oct 28 Javascript
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
学习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
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
php中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
PHP数据过滤的方法
2013/10/30 PHP
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
医学生实习自荐信
2013/10/01 职场文书
师范生实习自我鉴定
2013/11/01 职场文书
求职信模版
2013/11/30 职场文书
自我评价如何写好?
2014/01/05 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
会计岗位职责模板
2014/03/12 职场文书
校园安全演讲稿
2014/05/09 职场文书
学校社团活动总结
2015/05/07 职场文书
甲午大海战观后感
2015/06/02 职场文书
《所见》教学反思
2016/02/23 职场文书