学习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—选择jQuery
Jan 22 Javascript
Jquery中getJSON在asp.net中的使用说明
Mar 10 Javascript
JS创建类和对象的两种不同方式
Aug 08 Javascript
node.js中的http.response.writeHead方法使用说明
Dec 14 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
jquery 遍历数组 each 方法详解
May 25 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 Javascript
yarn的使用与升级Node.js的方法详解
Jun 04 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
Angular模版驱动表单的使用总结
May 05 Javascript
JavaScript中继承原理与用法实例入门
May 09 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实现的四则运算表达式计算实现代码
2011/08/02 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
基于jQuery的自动完成插件
2011/02/03 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
Python反转序列的方法实例分析
2018/03/21 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
10个顶级Python实用库推荐
2021/03/04 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
应届大学生自荐信格式
2013/09/21 职场文书
企业承诺书怎么写
2014/05/24 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
小学端午节活动总结
2015/02/11 职场文书
安徽导游词
2015/02/12 职场文书