在Ext中树是经验用到的,最简单的一棵树如下:
treePanelFirst = new Ext.tree.TreePanel({
// 自动创建树加载器 TreeLoader
dataUrl:'context.jsp',
root: {
nodeType: 'async',
text: 'Ext JS'
}
});
只要dataUrl正确的返回符合javascript数组类型的json就可以自动解读成树。
下面的代码和上面实现的功能一致
treePanelFirst = new Ext.tree.TreePanel({
// 树加载器(TreeLoader)的目的是从URL延迟加载树节点Ext.tree.TreeNode的子节点。
// 返回值必须是以树格式的javascript数组。
loader: new Ext.tree.TreeLoader(
{
dataUrl: 'context.jsp'
}),
// 树的根节点对象 ,采用异步的方式,用于动态加载子节点
root:new Ext.tree.AsyncTreeNode({
text:'Ext JS'
})
});
还有一种方法一样可以创建一棵树,效果和上面的一样:
ApiPanel = function() {
ApiPanel.superclass.constructor.call(this, {
// 树加载器(TreeLoader)的目的是从URL延迟加载树节点Ext.tree.TreeNode的子节点。
// 返回值必须是以树格式的javascript数组。
loader: new Ext.tree.TreeLoader(
{
dataUrl: 'context.jsp'//左侧目录数据源
}),
// 采用异步的方式,用于动态加载子节点
root: new Ext.tree.AsyncTreeNode(
{
// 只读属性,该节点所显示的文本.
text:'Ext JS',
})
});
};
Ext.extend(ApiPanel, Ext.tree.TreePanel, {
});
treePanelFirst = new ApiPanel();
最后在html文件中进行测试
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css">
<script type="text/javascript" src="../adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../ext-all.js"></script>
<script type="text/javascript" src="../Tree/TreePanelTest.js"></script>
<script type="text/javascript">
Ext.onReady(function(){
treePanelFirst.render("header");
});
</script>
</head>
<body>
<div id="header"></div>
</body>
</html>
上面三种方法效果是一样的,当然在创建树的时候还有很多属性可以指定常用的如下:
// True表示为显式建立头部元素,false则是跳过创建。
// 缺省下,如不创建头部,将使用title的内容设置到头部去,
// 如没指定title则不会。如果设置好title,但头部设置为false,那么头部亦不会生成。
header: true,
width: 248,
minSize: 175,
maxSize: 500,
// True表示为面板是可收缩的,并自动渲染一个展开/收缩的轮换按钮在头部工具条
collapsible: true,
margins:'0 0 5 5',
cmargins:'0 0 0 0',
// 是否隐藏根节点,ture就不隐藏根节点,false不显示根节点
rootVisible:false,
// true 表示在面板上设置 overflow:auto和出现滚动条
// false 表示裁剪所有溢出的部分,不设置默认为false
autoScroll:true,
animCollapse:false,
// 是否以动画形式展开.会慢慢展开
animate: true,
// 是否显示节点左侧的小三角形头的图标
useArrows:false,
// 是否显示区分结构的虚线,useArrows:false情况下才有效果
line:true,
// 是否允许拖放,true可以拖放
enableDD:true,
collapseMode:'mini',
// True 表示为展开/闭合的轮换按钮出现在面板头部的左方,false表示为在右方
collapseFirst:false,
现在来看看后台要传递过来的数据:
String jsonData = "[{text:'测试1',leaf: true ,msg:'moreMessage1'}, " +
"{text:'测试2',leaf: true ,msg:'moreMessage2'}, " +
"{text:'测试3',leaf: true ,msg:'moreMessage3'}]";
System.out.print(jsonData);
out.write(jsonData);
其实后台就是传递过来json数组,可以由各种方法来实现。结果如下:
如果要实现多层结构的树则可以返回下面类似的json数据:
String jsonData = "[{" +
"text:'测试1',msg:'moreMessage1',leaf: false," +
"children:[ " +
"{text:'测试1-1',msg:'moreMessage1-1',leaf:true}," +
"{text:'测试1-2',msg:'moreMessage1-2',leaf:true}," +
"{text:'测试1-3',msg:'moreMessage1-3',leaf:true}" +
"]" +
"}," +
"{text:'测试2',msg:'moreMessage2',leaf:true}, " +
"{text:'测试3',msg:'moreMessage3',leaf:true} " +
"]";
结果如下:
本人新手,刚刚开始学习Ext,有错请指出,谢谢