学习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 相关文章推荐
jQuery 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
借用Google的Javascript API Loader来加速你的网站
Jan 28 Javascript
jMessageBox 基于jQuery的窗口插件
Dec 09 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
May 20 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
Dec 14 Javascript
layer弹出层中H5播放器全屏出错的解决方法
Feb 21 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
JavaScript实现重力下落与弹性效果的方法分析
Dec 20 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 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
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
Vue实现跑马灯效果
2020/05/25 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
python和ruby,我选谁?
2017/09/13 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
Android面试题附答案
2014/12/08 面试题
机械制造专业个人的自我评价
2013/12/28 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
海洋天堂观后感
2015/06/05 职场文书
力克胡哲观后感
2015/06/10 职场文书
工作证明格式范文
2015/06/15 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python