`
slgworld
  • 浏览: 13596 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

checkboxtree

阅读更多
关于Ext的checkboxtree的实例,相当经典。
/**  
* @class Ext.tree.TreeCheckNodeUI  
* @extends Ext.tree.TreeNodeUI  
*  
* 对 Ext.tree.TreeNodeUI 进行checkbox功能的扩展,后台返回的结点信息不用非要包含checked属性  
*  
* 扩展的功能点有:  
* 一、支持只对树的叶子进行选择  
* 只有当返回的树结点属性leaf = true 时,结点才有checkbox可选  
* 使用时,只需在声明树时,加上属性 onlyLeafCheckable: true 既可,默认是false  
*  
* 二、支持对树的单选  
* 只允许选择一个结点  
* 使用时,只需在声明树时,加上属性 checkModel: "single" 既可  
*  
* 二、支持对树的级联多选  
* 当选择结点时,自动选择该结点下的所有子结点,以及该结点的所有父结点(根结点除外),特别是支持异步,当子结点还没显示时,会从后台取得子结点,然后将其选中/取消选中  
* 使用时,只需在声明树时,加上属性 checkModel: "cascade" 既可  
*  
* 三、添加"check"事件  
* 该事件会在树结点的checkbox发生改变时触发  
* 使用时,只需给树注册事件,如:  
* tree.on("check",function(node,checked){...});  
*  
* 默认情况下,checkModel为'multiple',也就是多选,onlyLeafCheckable为false,所有结点都可选  
*  
* 使用方法:在loader里加上 baseAttrs:{uiProvider:Ext.tree.TreeCheckNodeUI} 既可.  
* 例如:  
* var tree = new Ext.tree.TreePanel({  
* el:'tree-ct',  
* width:568,  
* height:300,  
* checkModel: 'cascade', //对树的级联多选  
* onlyLeafCheckable: false,//对树所有结点都可选  
* animate: false,  
* rootVisible: false,  
* autoScroll:true,  
* loader: new Ext.tree.DWRTreeLoader({  
* dwrCall:Tmplt.getTmpltTree,  
* baseAttrs: { uiProvider: Ext.tree.TreeCheckNodeUI } //添加 uiProvider 属性  
* }),  
* root: new Ext.tree.AsyncTreeNode({ id:'0' })  
* });  
* tree.on("check",function(node,checked){alert(node.text+" = "+checked)}); //注册"check"事件  
* tree.render();  
*  
*/   
 
Ext.tree.TreeCheckNodeUI = function() {   
//'multiple':多选; 'single':单选; 'cascade':级联多选   
this.checkModel = 'multiple';   
 
//only leaf can checked   
this.onlyLeafCheckable = false;   
 
Ext.tree.TreeCheckNodeUI.superclass.constructor.apply(this, arguments);   
};   
 
Ext.extend(Ext.tree.TreeCheckNodeUI, Ext.tree.TreeNodeUI, {   
 
renderElements : function(n, a, targetNode, bulkRender){   
var tree = n.getOwnerTree();   
this.checkModel = tree.checkModel || this.checkModel;   
this.onlyLeafCheckable = tree.onlyLeafCheckable || false;   
 
// add some indent caching, this helps performance when rendering a large tree   
this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';   
 
var cb = (!this.onlyLeafCheckable || a.leaf);   
var href = a.href ? a.href : Ext.isGecko ? "" : "#";   
var buf = ['<LI class=x-tree-node><DIV class="x-tree-node-el x-tree-node-leaf x-unselectable ', a.cls,'" ext:tree-node-id="',n.id,'" unselectable="on">',   
'<SPAN class=x-tree-node-indent>',this.indentMarkup,"</SPAN>",   
'<IMG class="x-tree-ec-icon x-tree-elbow" alt="" src="', this.emptyIcon, '">',   
'<IMG class="x-tree-node-icon',(a.icon ? " alt="" src="', a.icon || this.emptyIcon, '" unselectable="on">',   
cb ? ('<INPUT class=x-tree-node-cb type=checkbox value=on>' : '/>')) : '',   
'<A class=x-tree-node-anchor hideFocus tabIndex=1 href="',href,'" target="'+a.hrefTarget+'" a.hreftarget=""></A></DIV>",   
'<UL class=x-tree-node-ct style="DISPLAY: none"> </UL>',   
""].join('');   
 
var nel;   
if(bulkRender !== true && n.nextSibling && (nel = n.nextSibling.ui.getEl())){   
this.wrap = Ext.DomHelper.insertHtml("beforeBegin", nel, buf);   
}else{   
this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf);   
}   
 
this.elNode = this.wrap.childNodes[0];   
this.ctNode = this.wrap.childNodes[1];   
var cs = this.elNode.childNodes;   
this.indentNode = cs[0];   
this.ecNode = cs[1];   
this.iconNode = cs[2];   
var index = 3;   
if(cb){   
this.checkbox = cs[3];   
Ext.fly(this.checkbox).on('click', this.check.createDelegate(this,[null]));   
index++;   
}   
this.anchor = cs[index];   
this.textNode = cs[index].firstChild;   
},   
 
// private   
check : function(checked){   
var n = this.node;   
var tree = n.getOwnerTree();   
this.checkModel = tree.checkModel || this.checkModel;   
 
if( checked === null ) {   
checked = this.checkbox.checked;   
} else {   
this.checkbox.checked = checked;   
}   
 
n.attributes.checked = checked;   
tree.fireEvent('check', n, checked);   
 
if(!this.onlyLeafCheckable && this.checkModel == 'cascade'){   
var parentNode = n.parentNode;   
if(parentNode !== null) {   
this.parentCheck(parentNode,checked);   
}   
if( !n.expanded && !n.childrenRendered ) {   
n.expand(false,false,this.childCheck);   
}   
else {   
this.childCheck(n);   
}   
}else if(this.checkModel == 'single'){   
var checkedNodes = tree.getChecked();   
for(var i=0;i0){   
for(var i=0;i</LI> 
分享到:
评论

相关推荐

    checkbox tree 带checkbox的树

    在IT领域,"带checkbox的树"(Checkbox Tree)是一种常见的UI组件,广泛应用于数据管理和配置界面中。这种组件结合了树形结构和复选框的功能,用户可以通过选择或取消选择节点来对数据进行多选操作,使得在层级关系...

    CheckBoxTree.zip

    在Flex开发中,CheckBoxTree是一种常用的UI组件,它结合了树形结构和复选框功能,使得用户可以方便地对树节点进行多选操作。在本文中,我们将深入探讨如何在Flex中实现CheckBoxTree,以及相关的关键技术点。 首先,...

    laravel-admin:form表单树状复选框组件(CheckboxTree).rar

    本篇文章将详细讲解如何在 Laravel-Admin 中使用 "CheckboxTree" 组件,这是一个用于实现树状复选框功能的插件,特别适合处理涉及多级分类或权限分配的问题。 首先,我们需要了解 "CheckboxTree" 的基本概念。在 ...

    CheckBoxTree

    CheckBoxTree是一种在用户界面设计中常见的自定义控件,它结合了树形结构和复选框的功能,使得用户能够以图形化的方式对树状数据结构进行多选操作。这种控件广泛应用于各种软件和Web应用中,特别是在需要用户对层次...

    无限级多选树型菜单(checkbox Tree)

    无限级多选树型菜单(Checkbox Tree)是一种常见的UI组件,尤其在数据管理、权限配置、目录结构展示等场景中广泛应用。它结合了树形结构和复选框元素,允许用户进行多级选择,实现对数据层次化、递归式的操作。在...

    ExtJs4 Checkbox tree

    ExtJs4 Checkbox Tree是基于ExtJs 4框架实现的一种特殊树形组件,它在传统的树形结构基础上增加了复选框功能。这种组件常用于需要用户多选树形数据的场景,比如权限设置、目录选择等。下面将详细介绍ExtJs4 Checkbox...

    构造flex3.5的带复选框的树(CheckBoxTree)

    在Flex 3.5开发中,我们经常遇到需要创建具有交互性和可视复杂性的用户界面,其中一个常见的需求就是构建一个带有复选框的树形结构,也就是所谓的“复选框树”(CheckBoxTree)。这样的控件允许用户通过复选框来选择或...

    Java中带复选框的树(Java CheckBox Tree)的实现和应用.doc

    有了自定义的 TreeNode 和 TreeCellRenderer,我们可以创建一个 CheckBoxTree 并设置它。下面是如何在 Java Swing 应用程序中使用这些组件的示例: ```java import javax.swing.*; import javax.swing.tree....

    js tree,checkbox tree

    "Checkbox Tree"是这种树结构的一个扩展,它在每个节点上添加了复选框,允许用户进行多选操作,从而在数据筛选、权限设置等方面提供了更多的交互可能性。 在JavaScript中实现树形结构,通常会用到一些库或框架,如...

    checkbox tree extjs2

    在ExtJS中,Checkbox Tree是一种特殊的树形组件,它允许用户通过复选框选择树结构中的节点。这个"checkbox tree extjs2"主题主要涉及如何在ExtJS 2版本中实现带有复选框功能的树形控件。 在ExtJS 2中,Checkbox ...

    flex带复选框的tree,flex checkboxtree

    在Flex中,Tree组件是用于显示层次结构数据的控件,而"flex带复选框的tree"(Flex CheckboxTree)则是对Tree组件的一种扩展,增加了复选框功能,用户可以对树形结构的节点进行选择或全选操作,常用于权限管理、配置...

    flex checkboxtree复选树形下拉框

    在Flex开发中,"flex checkboxtree复选树形下拉框"是一种常见的用户界面组件,它结合了树形结构和复选框的功能,允许用户在层次结构中进行多选操作。这种组件通常用于数据筛选、配置设置或者层级分类的选择场景。在...

    jquery checkbox tree editor v1.0

    《jQuery Checkbox Tree Editor v1.0:构建动态交互的树形复选框编辑器》 在Web开发领域,用户界面的交互性和易用性是提升用户体验的关键因素之一。jQuery作为一个强大的JavaScript库,提供了丰富的功能来简化DOM...

    flex checkboxtree 和可增加面板,可关闭的tab页

    `CheckboxTree`和可添加/关闭的`TabPanel`是Flex中常见的组件,用于提供用户友好的交互界面。这篇博客文章《flex checkboxtree 和可增加面板,可关闭的tab页》可能详细讲解了如何在Flex应用中实现这两个功能。 `...

    纯JS+HTML写的checkBox Tree 级联选中 好用无BUG

    在前端开发中,CheckBox Tree(复选框树)是一种常见的组件,用于展示具有层级关系的数据,并支持用户进行多级选择。这个"纯JS+HTML写的checkBox Tree 级联选中"实例,解决了其他示例中可能存在的BUG,提供了一个...

    checkBoxTree 树

    在IT行业中,`checkBoxTree`是一种常见的用户界面组件,它结合了复选框(checkbox)与树形结构(tree),通常用于数据组织和选择操作。这个组件允许用户以层次结构的方式选择一组相关的项,其中父节点的状态依赖于其...

    Flex Checkbox Tree

    在这个文件中,开发者可能创建了一个`CheckBoxTree`实例,指定了数据源,并绑定了相应的事件处理函数,如`itemClick`或`nodeCheckChange`。同时,MXML文件通常也会包含界面布局和样式设置。 综上所述,`Flex ...

    Java带复选框的树(Java CheckBox Tree)实现和应用

    Java带复选框的树(Java CheckBox Tree)实现和应用 Java带复选框的树(Java CheckBox Tree)是一种特殊的树形控件,在Java Swing开发中经常被使用。它的实现和应用主要包含了以下几个方面的知识点: 首先,Java ...

Global site tag (gtag.js) - Google Analytics