学习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脚本类
Aug 27 Javascript
JS 字符串连接[性能比较]
May 10 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
Sep 01 Javascript
深入理解JavaScript中的传值与传引用
Dec 09 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
Apr 01 Javascript
Angular.js中上传指令ng-upload的基本使用教程
Jul 30 Javascript
phantomjs导出html到pdf的方法总结
Oct 19 Javascript
Vue-cli@3.0 插件系统简析
Sep 05 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
vue之debounce属性被移除及处理详解
Nov 13 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
如何去掉文章里的 html 语法
2006/10/09 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
python实现将内容分行输出
2015/11/05 Python
python实现简单购物商城
2016/05/21 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
优秀学生干部推荐材料
2014/02/03 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
五年级学生评语大全
2014/12/26 职场文书
综合素质自我评价评语
2015/03/06 职场文书
给下属加薪申请报告
2015/05/15 职场文书