第二步:重写Ext.tree.TreePanel类的registerNode方法,记tree注册treeid为真实
ID
Ext.override(Ext.tree.TreePanel,{
getNodeByTreeId : function(treeid){
return this.nodeHash[treeid];
},
registerNode : function(node){
this.nodeHash[node.attributes.treeid] = node;
},
unregisterNode : function(node){
delete this.nodeHash[node.attributes.treeid];
}
});
第三步:重写Ext.tree.TreeNode类的ensureVisible 方法,使其调用的getNodeByTreeId为treeid
Ext.override(Ext.tree.TreeNode,{
ensureVisible : function(callback){
var tree = this.getOwnerTree();
tree.expandPath(this.parentNode.getPath(), false, function(){
var node = tree.getNodeByTreeId(this.attributes.treeid); // Somehow if we don't do this, we lose changes that happened to node in the meantime
tree.getTreeEl().scrollChildIntoView(node.ui.anchor);
Ext.callback(callback);
}.createDelegate(this));
}
});
第四步:重写Ext.tree.TreeEventModel类getNode方法,使其调getNodeByTreeId方法
Ext.override(Ext.tree.TreeEventModel,{
getNode : function(e){
var t;
if(t = e.getTarget('.x-tree-node-el', 10)){
var id = Ext.fly(t, '_treeEvents').getAttributeNS('ext', 'tree-node-id');
if(id){
return this.tree.getNodeByTreeId(id);
}
}
return null;
}
});
经过上面的4步以后,“ext2的tree id不唯一的解决方法”一文中还有第5步,写的不是很详细
第五步:重写Ext.tree.TreeNodeUI类,我这里采用的是继承,覆盖renderElements方法
Ext.override(Ext.tree.TreeNodeUI,{
renderElements:function(D,I,H,J){
this.indentMarkup=D.parentNode?D.parentNode.ui.getChildIndent():"";
var E=typeof I.checked=="boolean";
var B=I.href?I.href:Ext.isGecko?"":"#";
var C=["<li class=\"x-tree-node\"><div ext:tree-node-id=\"",D.attributes.treeid,"\" class=\"x-tree-node-el x-tree-node-leaf x-unselectable ",I.cls,"\" unselectable=\"on\">","<span class=\"x-tree-node-indent\">",this.indentMarkup,"</span>","<img src=\"",this.emptyIcon,"\" class=\"x-tree-ec-icon x-tree-elbow\" />","<img src=\"",I.icon||this.emptyIcon,"\" class=\"x-tree-node-icon",(I.icon?" x-tree-node-inline-icon":""),(I.iconCls?" "+I.iconCls:""),"\" unselectable=\"on\" />",E?("<input class=\"x-tree-node-cb\" type=\"checkbox\" "+(I.checked?"checked=\"checked\" />":"/>")):"","<a hidefocus=\"on\" class=\"x-tree-node-anchor\" href=\"",B,"\" tabIndex=\"1\" ",I.hrefTarget?" target=\""+I.hrefTarget+"\"":"","><span unselectable=\"on\">",D.text,"</span></a></div>","<ul class=\"x-tree-node-ct\" style=\"display:none;\"></ul>","</li>"].join("");
var A;
if(J!==true&&D.nextSibling&&(A=D.nextSibling.ui.getEl())){
this.wrap=Ext.DomHelper.insertHtml("beforeBegin",A,C);
}else{
this.wrap=Ext.DomHelper.insertHtml("beforeEnd",H,C);
}
this.elNode=this.wrap.childNodes[0];
this.ctNode=this.wrap.childNodes[1];
var G=this.elNode.childNodes;
this.indentNode=G[0];
this.ecNode=G[1];
this.iconNode=G[2];
var F=3;
if(E){
this.checkbox=G[3];
F++;
}
this.anchor=G[F];
this.textNode=G[F].firstChild;
}
});
注:在我的项目中没有去添加这个步骤,因为我采用了文章开头说的TreeCheckNodeUI.js,不过对这个js作了小的调整。修改的地方如下:
主要是这句:
var buf = ['<li class="x-tree-node"><div ext:tree-node-id="',n.treeType+n.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ', a.cls,'" unselectable="on">',
在上面一句用到了n.treeType这个属性,在ext-all.js里面是没有这个属性的,这就需要我们自己添加上去。代码如下:(修改ext-all.js)
Ext.data.Node=function(A){this.attributes=A||{};this.leaf=this.attributes.leaf;this.treeType=this.attributes.treeType;this.id=this.attributes.id;。。
上面就是js部分修改的地方,那么在程序里用JsonUtils.write();方法写树形结构的时候,就需要把treeType加入进去。
分享到:
相关推荐
本文将详细探讨如何在使用EXT(一个流行的JavaScript库,用于构建富客户端应用程序)处理由两张表组成的树结构时,有效地防止ID重复的问题。这个问题涉及到数据一致性、数据完整性以及有效利用数据库索引来优化查询...
Tree组件是EXT JS中的一个重要部分,它允许开发者创建可交互的树形结构,通常用于展示层次关系的数据,如文件系统、组织结构或数据库层次结构。 【描述】虽然描述中提到的是"NULL",但我们可以根据EXT JS Tree组件...
`Ext.tree.TreeLoader`是Ext JS库中的一个组件,它负责加载和解析树形结构的数据,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,非常适合于在服务器和客户端之间传输数据。我们将通过实例...
EXT Tree 是一个强大的JavaScript组件,它是EXT JS框架的一部分,用于构建可交互的树形数据结构。EXT Tree在网页中常用于展示层次结构的数据,如文件系统、组织结构或导航菜单等。EXT Tree提供了丰富的功能,包括...
标题中的"oa.rar_ext_ext java oa_ext oa_ext tree_java ext tree"似乎是一个组合字符串,它可能代表了某个项目或教程的文件结构。其中,“oa”可能是项目或系统的名称,而“ext”、“java”、“oa_ext”、“tree_...
在EXT JS中,Tree组件通常是通过`Ext.tree.Panel`类创建的,它提供了丰富的配置项和方法,以满足各种需求。而多选功能的实现则主要依赖于`checkboxModel`配置。通过设置`checkboxModel`,我们可以启用树节点的复选框...
在EXT JS框架中,"ext grid tree 应用"是一个常见的功能组合,它结合了Grid面板和Tree面板的优势,用于展示复杂的数据结构。Grid通常用于显示二维表格数据,而Tree则用于展示层次化的数据。在这个例子中,开发者通过...
EXT提供了丰富的组件库,其中就包括TREE组件,它允许展示和操作数据结构为树形的视图。在这个场景中,"JSP EXT 遍历 TREE"涉及到的是如何在JSP页面上使用EXT框架来遍历和操作TREE组件。 首先,EXT-all.css和ext-all...
本文详细介绍了如何使用ExtJS中的`Ext.ux.tree.TreeGrid`组件实现异步加载功能,包括前端配置和后端数据处理两个方面。通过这种方式可以有效提升用户体验,同时减轻服务器的压力。在实际开发过程中,还需要根据具体...
`Ext.Tree.Panel`是EXT JS库中的一个重要组件,用于展示层次结构的数据,通常用作树形菜单或文件系统目录的视图。这个组件是EXT JS框架中用于创建交互式、可扩展的树结构的工具。以下是对`Ext.Tree.Panel`相关知识的...
Ext Tree 是 Ext JS 库中的一个组件,它用于在用户界面上展示层次化的数据结构,类似于文件系统的目录结构。在给定的资源中,我们有多个 HTML 文件(tree2.html, tres.html, s1.html, tree.html)和 JavaScript 文件...
EXT4支持多种数据结构,其中包括了描述文件系统树形结构的“tree”概念。在EXT4中,文件和目录被组织成一棵层次化的树形结构,允许快速地查找、创建和管理文件。 在编程和用户界面设计中,"tree"通常指的是可视化...
EXT Tree 是一个基于 ExtJS 库的组件,用于构建可交互的树形数据结构。在 Web 开发中,树形控件常用于展示层级关系的数据,例如目录结构、组织架构或者菜单系统。EXT Tree 提供了丰富的功能和高度自定义的选项,使其...
EXT TREE扩展CHECKBOX JS是一种在EXT JS框架下对树形组件(Tree Panel)进行增强,实现复选框功能的技术。EXT JS是一个强大的JavaScript GUI库,它提供了丰富的组件和功能,用于构建复杂的Web应用程序。在EXT JS中,...
Ext JS是一种强大的JavaScript库,用于构建富客户端应用,而Tree Panel则是展示层次结构数据的一种组件。在后台数据交互中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,...
ExtTree是Ext JS库中的一个组件,用于创建和展示树形结构的数据。它在Web应用程序中广泛使用,特别是在需要组织和导航层次结构信息时。在本案例中,“extTree例子点击出现界面”指的是用户在浏览ExtTree时,通过点击...
标签"Ext框架结构"和"Ext目录结构"分别对应了框架的逻辑结构和物理结构。逻辑结构是指类和对象的组织方式,而目录结构则是指源代码在硬盘上的文件和目录布局。在Ext框架中,源码通常按照模块进行划分,比如`ext-all....
【标题】"ext-tree.rar_ext_ext tr_ext tre_ext.tr_ext.tree" 暗示这是一个关于Ext JS库中TreePanel组件的实例,其中可能包含了用于创建和管理数据结构的树形视图,以及与数据库交互的功能。 【描述】"ext的树的...
复选框树(Checked Tree)允许用户通过复选框来选择或取消选择树结构中的节点。这种功能对于需要用户进行多级选择的情况非常有用,例如在权限管理、目录结构操作或者配置设置中。以下是对这个特性的详细解释: 1. *...
在EXT JS框架中,"ext tree 分页"是一种优化技术,用于处理大量数据时避免页面卡顿的问题。在EXT JS的树形组件(TreePanel)中,如果一次性加载所有节点,特别是当树结构非常深或者节点数量巨大时,不仅会消耗大量...