学习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 select控制插件
Aug 17 Javascript
jquery根据name属性查找的小例子
Nov 21 Javascript
获取3个数组不重复的值的具体实现
Dec 30 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
Apr 21 Javascript
详解JavaScript中的forEach()方法的使用
Jun 08 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 Javascript
JavaScript入门教程之引用类型
May 04 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
Oct 14 Javascript
Require.js的基本用法详解
Jul 03 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
Dec 15 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连接Oracle数据库
2006/10/09 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python性能提升之延迟初始化
2016/12/04 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python统计中文字符数量的两种方法
2019/01/31 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
大专生毕业的自我评价
2014/02/06 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python