学习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 相关文章推荐
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
Jan 20 Javascript
用js获取电脑信息(是使用与IE浏览器)
Jan 15 Javascript
js获取select选中的option的text示例代码
Dec 19 Javascript
一个JavaScript的求爱小特效
May 09 Javascript
jQuery中:nth-child选择器用法实例
Dec 31 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
Apr 17 Javascript
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
vue h5移动端禁止缩放代码
Oct 28 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 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
一个简单计数器的源代码
2006/10/09 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
jQuery前端分页示例分享
2015/02/10 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
深究AngularJS中$sce的使用
2017/06/12 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python探索之pLSA实现代码
2017/10/25 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
Python flask框架post接口调用示例
2019/07/03 Python
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
市场营销个人求职信范文
2014/02/02 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
投资协议书范本
2014/04/21 职场文书
超市店庆活动方案
2014/08/31 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
接收函
2019/04/22 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
Python实现的扫码工具居然这么好用!
2021/06/07 Python
Github 使用python对copilot做些简单使用测试
2022/04/14 Python