- 浏览: 23957 次
- 性别:
- 来自: 北京
最新评论
js 文件
/*!
* Ext JS Library 3.0.0
* Copyright(c) 2006-2009 Ext JS, LLC
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.onReady(function(){
var tree = new Ext.tree.TreePanel({
renderTo:'tree-div',
title: 'My Task List',
height: 450,
width: 600,
useArrows:true,
autoScroll:true,
animate:true,
enableDD:true,
containerScroll: true,
rootVisible: false,
frame: true,
root: {
nodeType: 'async'
},
dataUrl: 'check-nodes.json',
buttons: [{
text: 'Get Completed Tasks',
handler: function(){
var msg = '', selNodes = tree.getChecked(); // getNode select return array
Ext.each(selNodes, function(node){
if(msg.length > 0){
msg += ', ';
}
msg += node.text;
});
Ext.Msg.show({
title: 'Completed Tasks',
msg: msg.length > 0 ? msg : 'None',
icon: Ext.Msg.INFO,
minWidth: 200,
buttons: Ext.Msg.OK
});
}
}]
});
/*
* tree.suspendEvents() 方法说明:暂停触发所有的事件
* tree.resumeEvents() 方法说明:重新触发事件
*/
tree.on('checkchange', function(node, checked) {
node.expand(); // 展开树
var no = 0;
// **************当被单击的节点是叶子节点时*******************
if(node.isLeaf()){
/*
* 子节点全部选中 , 父节点被选中
*/
// 选中子节点中的一个选项
if(node.getUI().isChecked()){
// 父节点在没被选中的情况下
if(!node.parentNode.getUI().isChecked()){
// 遍历子节点的选项
var num = node.parentNode.childNodes.length;
//alert('num = '+num);
node.parentNode.eachChild(function(child){
// 子节点中有一项未被选中,停止 跳出循环
if(child.getUI().isChecked()){
no++;
}
});
if(no==num){
//alert("ok 选中父节点");
node.parentNode.ui.toggleCheck(true);
node.parentNode.attributes.checked = true;
}
// 父节点选中情况下不做处理
}else{
return;
}
}
/*
* 子节点中有一个未被选中 , 父节点将不被选中
*/
if(!node.getUI().isChecked()){
//no--;
if(node.parentNode.text != undefined){
node.parentNode.ui.toggleCheck(false);
node.parentNode.attributes.checked = false;
}
}
}
// **************当被单击的节点不是叶子节点时*******************
var i = 0;
var j = 0;
// 叶子父节点选中
if(!node.isLeaf()){
// 累加
// 遍历子节点的选项
var num = node.parentNode.childNodes.length;
node.parentNode.eachChild(function(child){
if(child.getUI().isChecked()){
no++;
}
});
if(no==num){
node.parentNode.ui.toggleCheck(true);
node.parentNode.attributes.checked = true;
}
// *************** 全选 ****************
if(node.getUI().isChecked()){
tree.suspendEvents(); //暂停触发所有事件
checkAll(node,0,0);
tree.resumeEvents(); //重新出发所有事件
}
// **************** 去选(父节点选项去选) *******************
// 叶子父节点的去选情况
if(!node.getUI().isChecked()){
node.eachChild(function(child){
i++;
if(child.getUI().isChecked()){
j++;
}
});
// 表面点击了全部去选
if(i==j){
outOfcheck(node,0,0); // 调用全消的方法
}
// 判断该节点上面是否还有父节点
// 1. 有的话 去掉父节点的选项
if(node.parentNode.text!=undefined){
//alert('他有父节点');
if(node.parentNode.getUI().isChecked()){
node.parentNode.ui.toggleCheck(false);
node.parentNode.attributes.checked = false;
return;
}
// 2. 没有的话 // 不做处理
}else{
//alert('他没有父节点');
}
}
// 全选的方法
function checkAll(node,i,j){
var z = [];
// 全部选中 Begin
this.node = node;
node.eachChild(function(child){
j++;
if(!child.getUI().isChecked()){
i++;
if(child.hasChildNodes()){
z.push(child);
}
}
});
if(j>=i){
tree.suspendEvents(); //暂停触发所有事件
node.eachChild(function(child){
if(!child.getUI().isChecked()){
child.ui.toggleCheck(true);
child.attributes.checked = true;
}
});
tree.resumeEvents(); //重新触发所有事件
}
if(z.length>0){
for(var s=0;s<z.length;s++){
checkAll(z[s],0,0);
}
}
// 全部选中 End
}
// 全部去选的方法
function outOfcheck(node,i,j){
var z = [];
// 全部去选 Begin
this.node = node;
node.eachChild(function(child){
j++;
if(child.getUI().isChecked()){
i++;
if(child.hasChildNodes()){
z.push(child);
}
}
});
if(i==j){
tree.suspendEvents(); //暂停触发所有事件
node.eachChild(function(child){
if(child.getUI().isChecked()){
child.ui.toggleCheck(false);
child.attributes.checked = false;
}
});
tree.resumeEvents(); //重新出发所有事件
}
if(z.length>0){
for(var s=0;s<z.length;s++){
outOfcheck(z[s],0,0);
}
}
// 全部去选 End
}
}
});
tree.getRootNode().expand(true); // 找到根节点展开
});
html 文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Customizing TreePanel</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<!-- Common Styles for the examples -->
<link rel="stylesheet" type="text/css" href="../shared/examples.css" />
<link rel="stylesheet" type="text/css" href="../ux/css/ColumnNodeUI.css" />
<link rel="stylesheet" type="text/css" href="column-tree.css" />
<!-- GC -->
<!-- LIBS -->
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
<!-- ENDLIBS -->
<script type="text/javascript" src="../../ext-all.js"></script>
<script type="text/javascript" src="../code-display.js"></script>
<script type="text/javascript" src="../ux/ColumnNodeUI.js"></script>
<script type="text/javascript" src="column-tree.js"></script>
<!-- EXAMPLES -->
<script type="text/javascript" src="../shared/examples.js"></script>
</head>
<body>
<h1>ColumnTree Example</h1>
<p>Demonstrates extending the native <tt>Ext.tree.TreePanel</tt> and <tt>Ext.tree.TreeNodeUI</tt>
to display basic columns via the custom <a href="../ux/ColumnNodeUI.js">Ext.ux.tree.ColumnTree</a>
and <a href="../ux/ColumnNodeUI.js">Ext.ux.tree.ColumnNodeUI</a> classes.</p>
<p>The js is not minified so it is readable. See <a href="column-tree.js">column-tree.js</a>.</p>
</body>
</html>
josn 文件
[{
id:1001,
text: 'To Do',
checked: false,
cls: 'folder',
children: [{
text: 'Go jogging',
id:100101,
checked: false,
children:[{id:10010101,text:'aaa',leaf:true,checked:false},{id:10010102,text:'bbb',leaf:true,checked:false}]
},{
text: 'Take a nap',
id:100102,
leaf: true,
checked: false
},{
text: 'Climb Everest',
id:100103,
leaf: true,
checked: false
}]
},{
text: 'Grocery List',
id:1002,
checked: false,
cls: 'folder',
children: [{
text: 'Bananas',
id:100201,
leaf: true,
checked: false
},{
text: 'Milk',
id:100202,
leaf: true,
checked: false
},{
text: 'Cereal',
id:100203,
leaf: true,
checked: false
},{
text: 'Energy foods',
id:100204,
checked: false,
cls: 'folder',
children: [{
text: 'Coffee',
id:10020401,
leaf: true,
checked: false
},{
text: 'Red Bull',
id:10020402,
leaf: true,
checked: false
}]
}]
},{
text: 'Remodel Project',
id:1003,
checked: false,
cls: 'folder',
children: [{
text: 'Finish the budget',
id:100301,
leaf: true,
checked: false
},{
text: 'Call contractors',
id:100302,
leaf: true,
checked: false
},{
text: 'Choose design',
id:100303,
leaf: true,
checked: false
}]
}]
/*!
* Ext JS Library 3.0.0
* Copyright(c) 2006-2009 Ext JS, LLC
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.onReady(function(){
var tree = new Ext.tree.TreePanel({
renderTo:'tree-div',
title: 'My Task List',
height: 450,
width: 600,
useArrows:true,
autoScroll:true,
animate:true,
enableDD:true,
containerScroll: true,
rootVisible: false,
frame: true,
root: {
nodeType: 'async'
},
dataUrl: 'check-nodes.json',
buttons: [{
text: 'Get Completed Tasks',
handler: function(){
var msg = '', selNodes = tree.getChecked(); // getNode select return array
Ext.each(selNodes, function(node){
if(msg.length > 0){
msg += ', ';
}
msg += node.text;
});
Ext.Msg.show({
title: 'Completed Tasks',
msg: msg.length > 0 ? msg : 'None',
icon: Ext.Msg.INFO,
minWidth: 200,
buttons: Ext.Msg.OK
});
}
}]
});
/*
* tree.suspendEvents() 方法说明:暂停触发所有的事件
* tree.resumeEvents() 方法说明:重新触发事件
*/
tree.on('checkchange', function(node, checked) {
node.expand(); // 展开树
var no = 0;
// **************当被单击的节点是叶子节点时*******************
if(node.isLeaf()){
/*
* 子节点全部选中 , 父节点被选中
*/
// 选中子节点中的一个选项
if(node.getUI().isChecked()){
// 父节点在没被选中的情况下
if(!node.parentNode.getUI().isChecked()){
// 遍历子节点的选项
var num = node.parentNode.childNodes.length;
//alert('num = '+num);
node.parentNode.eachChild(function(child){
// 子节点中有一项未被选中,停止 跳出循环
if(child.getUI().isChecked()){
no++;
}
});
if(no==num){
//alert("ok 选中父节点");
node.parentNode.ui.toggleCheck(true);
node.parentNode.attributes.checked = true;
}
// 父节点选中情况下不做处理
}else{
return;
}
}
/*
* 子节点中有一个未被选中 , 父节点将不被选中
*/
if(!node.getUI().isChecked()){
//no--;
if(node.parentNode.text != undefined){
node.parentNode.ui.toggleCheck(false);
node.parentNode.attributes.checked = false;
}
}
}
// **************当被单击的节点不是叶子节点时*******************
var i = 0;
var j = 0;
// 叶子父节点选中
if(!node.isLeaf()){
// 累加
// 遍历子节点的选项
var num = node.parentNode.childNodes.length;
node.parentNode.eachChild(function(child){
if(child.getUI().isChecked()){
no++;
}
});
if(no==num){
node.parentNode.ui.toggleCheck(true);
node.parentNode.attributes.checked = true;
}
// *************** 全选 ****************
if(node.getUI().isChecked()){
tree.suspendEvents(); //暂停触发所有事件
checkAll(node,0,0);
tree.resumeEvents(); //重新出发所有事件
}
// **************** 去选(父节点选项去选) *******************
// 叶子父节点的去选情况
if(!node.getUI().isChecked()){
node.eachChild(function(child){
i++;
if(child.getUI().isChecked()){
j++;
}
});
// 表面点击了全部去选
if(i==j){
outOfcheck(node,0,0); // 调用全消的方法
}
// 判断该节点上面是否还有父节点
// 1. 有的话 去掉父节点的选项
if(node.parentNode.text!=undefined){
//alert('他有父节点');
if(node.parentNode.getUI().isChecked()){
node.parentNode.ui.toggleCheck(false);
node.parentNode.attributes.checked = false;
return;
}
// 2. 没有的话 // 不做处理
}else{
//alert('他没有父节点');
}
}
// 全选的方法
function checkAll(node,i,j){
var z = [];
// 全部选中 Begin
this.node = node;
node.eachChild(function(child){
j++;
if(!child.getUI().isChecked()){
i++;
if(child.hasChildNodes()){
z.push(child);
}
}
});
if(j>=i){
tree.suspendEvents(); //暂停触发所有事件
node.eachChild(function(child){
if(!child.getUI().isChecked()){
child.ui.toggleCheck(true);
child.attributes.checked = true;
}
});
tree.resumeEvents(); //重新触发所有事件
}
if(z.length>0){
for(var s=0;s<z.length;s++){
checkAll(z[s],0,0);
}
}
// 全部选中 End
}
// 全部去选的方法
function outOfcheck(node,i,j){
var z = [];
// 全部去选 Begin
this.node = node;
node.eachChild(function(child){
j++;
if(child.getUI().isChecked()){
i++;
if(child.hasChildNodes()){
z.push(child);
}
}
});
if(i==j){
tree.suspendEvents(); //暂停触发所有事件
node.eachChild(function(child){
if(child.getUI().isChecked()){
child.ui.toggleCheck(false);
child.attributes.checked = false;
}
});
tree.resumeEvents(); //重新出发所有事件
}
if(z.length>0){
for(var s=0;s<z.length;s++){
outOfcheck(z[s],0,0);
}
}
// 全部去选 End
}
}
});
tree.getRootNode().expand(true); // 找到根节点展开
});
html 文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Customizing TreePanel</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<!-- Common Styles for the examples -->
<link rel="stylesheet" type="text/css" href="../shared/examples.css" />
<link rel="stylesheet" type="text/css" href="../ux/css/ColumnNodeUI.css" />
<link rel="stylesheet" type="text/css" href="column-tree.css" />
<!-- GC -->
<!-- LIBS -->
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
<!-- ENDLIBS -->
<script type="text/javascript" src="../../ext-all.js"></script>
<script type="text/javascript" src="../code-display.js"></script>
<script type="text/javascript" src="../ux/ColumnNodeUI.js"></script>
<script type="text/javascript" src="column-tree.js"></script>
<!-- EXAMPLES -->
<script type="text/javascript" src="../shared/examples.js"></script>
</head>
<body>
<h1>ColumnTree Example</h1>
<p>Demonstrates extending the native <tt>Ext.tree.TreePanel</tt> and <tt>Ext.tree.TreeNodeUI</tt>
to display basic columns via the custom <a href="../ux/ColumnNodeUI.js">Ext.ux.tree.ColumnTree</a>
and <a href="../ux/ColumnNodeUI.js">Ext.ux.tree.ColumnNodeUI</a> classes.</p>
<p>The js is not minified so it is readable. See <a href="column-tree.js">column-tree.js</a>.</p>
</body>
</html>
josn 文件
[{
id:1001,
text: 'To Do',
checked: false,
cls: 'folder',
children: [{
text: 'Go jogging',
id:100101,
checked: false,
children:[{id:10010101,text:'aaa',leaf:true,checked:false},{id:10010102,text:'bbb',leaf:true,checked:false}]
},{
text: 'Take a nap',
id:100102,
leaf: true,
checked: false
},{
text: 'Climb Everest',
id:100103,
leaf: true,
checked: false
}]
},{
text: 'Grocery List',
id:1002,
checked: false,
cls: 'folder',
children: [{
text: 'Bananas',
id:100201,
leaf: true,
checked: false
},{
text: 'Milk',
id:100202,
leaf: true,
checked: false
},{
text: 'Cereal',
id:100203,
leaf: true,
checked: false
},{
text: 'Energy foods',
id:100204,
checked: false,
cls: 'folder',
children: [{
text: 'Coffee',
id:10020401,
leaf: true,
checked: false
},{
text: 'Red Bull',
id:10020402,
leaf: true,
checked: false
}]
}]
},{
text: 'Remodel Project',
id:1003,
checked: false,
cls: 'folder',
children: [{
text: 'Finish the budget',
id:100301,
leaf: true,
checked: false
},{
text: 'Call contractors',
id:100302,
leaf: true,
checked: false
},{
text: 'Choose design',
id:100303,
leaf: true,
checked: false
}]
}]
相关推荐
ExtJs4.2没有直接提供下拉树这个组件,但是有例子可以用,文件位置:ext-4.2.1.883\examples\ux\TreePicker.js 但是它有点小毛病吧:默认显示了根节点;达到最小高度时再展开节点,高度不能自动调整。 所以我做了一...
动态树搜索通常有两种方法:一是通过`expandAll`,这种方法会扩展树的所有节点,然后在前端进行搜索。但这种方法对于大数据量的树来说效率低下,且存在已知的bug。另一种方法是使用`expandPath`,这种方法更高效,...
ExtJS 4.2 Desktop 拓展是一个用于构建桌面样式的Web应用程序的框架,它提供了丰富的用户界面组件和交互效果。这个拓展是基于ExtJS 4.2版本,一个非常强大的JavaScript库,用于创建数据驱动、富客户端的Web应用。在...
本例旨在说明extjs的tree操作,后台操作很简陋。给入门同学一个简单指导。 本例,存在几个明显的bug,但不影响本意,见谅。 需要C#无bug版的同学,请留下邮箱。 最后:祝自己在13年,顺利完成所有计划!
在ExtJS框架中,经常会使用到的下拉控件一般仅限于官方提供的下拉列表(***boBox),它对于基础的表单输入非常有用。然而,当需要实现更加复杂的用户交互时,例如在选择数据时拥有类似树形结构的下拉或者表格形式的...
在学习ext的过程中花了不少时间,我想很多网友刚开始学习ext的时候肯定会用到tree所以把现有项目的tree操作做了一个demo分享给大家以便学习参考。例子里面包括了对tree增、改、删、拖动、子父节点的选则取消、右键...
-修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(feedback:ben.zhou)。 -应用补丁#6593, #6621(feedback:vbelyaev)。 +修正IE7下Grid分页...
-修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性...
郁闷 我在鼠标左侧点击tree节点,在右侧创建一个标签页,这个已经能够实现,于是我再在新建的标签页里嵌套一个Grid。 奇怪的问题出现了。。 FF和IE下都没报错。但是Grid就是不显示。本来我以为我代码错误。于是我狂...
如何才能很好地利用目前公认最好的调试工具FireBug发现并解决开发中遇到的各种BUG 国讯OA工作流管理实现基本功能 1、定义任意形式的工作流程 国讯OA强大的自定义功能可以满足企业对复杂工作流程的定义,包括请假...
10. **日志记录和调试**:可能包含一些方便的调试和日志记录工具,有助于开发和调试过程中追踪问题。 由于是从源码反编译,这意味着你可能需要具备一定的编程基础,特别是对C#、JavaScript以及Ext.NET框架的理解。...
-修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空...
-修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空...
描述中的“节点klass”可能是指这个库提供了一种在JavaScript(在Node.js环境中)中创建和管理类的方法,类似于ExtJS这样的库在客户端JavaScript中的做法。ExtJS是一个广泛使用的前端框架,它提供了丰富的组件和强大...
EXTJS是一个流行的JavaScript库,提供丰富的组件和布局管理,使得开发者可以轻松创建出专业级别的Web应用界面。通过结合这两者,开发者能够构建出既有美观界面又具备强大图形编辑功能的Web应用。 在“mxgraph-eval-...
-修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空...