`
zhanglun1225
  • 浏览: 57177 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ext两张表组成的tree结构防止id重复的方法(二)

    博客分类:
  • ext
阅读更多

第二步:重写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 方法,使其调用的getNodeByTreeIdtreeid

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.TreeEventModelgetNode方法,使其调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步以后,ext2tree 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加入进去。

 

0
1
分享到:
评论

相关推荐

    ext两张表组成的tree结构防止id重复的方法(一)

    本文将详细探讨如何在使用EXT(一个流行的JavaScript库,用于构建富客户端应用程序)处理由两张表组成的树结构时,有效地防止ID重复的问题。这个问题涉及到数据一致性、数据完整性以及有效利用数据库索引来优化查询...

    ext TREE

    Tree组件是EXT JS中的一个重要部分,它允许开发者创建可交互的树形结构,通常用于展示层次关系的数据,如文件系统、组织结构或数据库层次结构。 【描述】虽然描述中提到的是"NULL",但我们可以根据EXT JS Tree组件...

    Ext.tree.TreeLoader附带封装的json类

    `Ext.tree.TreeLoader`是Ext JS库中的一个组件,它负责加载和解析树形结构的数据,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,非常适合于在服务器和客户端之间传输数据。我们将通过实例...

    EXT tree 使用 实例 最新

    EXT Tree 是一个强大的JavaScript组件,它是EXT JS框架的一部分,用于构建可交互的树形数据结构。EXT Tree在网页中常用于展示层次结构的数据,如文件系统、组织结构或导航菜单等。EXT Tree提供了丰富的功能,包括...

    oa.rar_ext_ext java oa_ext oa_ext tree_java ext tree

    标题中的"oa.rar_ext_ext java oa_ext oa_ext tree_java ext tree"似乎是一个组合字符串,它可能代表了某个项目或教程的文件结构。其中,“oa”可能是项目或系统的名称,而“ext”、“java”、“oa_ext”、“tree_...

    Ext 带多选的Tree

    在EXT JS中,Tree组件通常是通过`Ext.tree.Panel`类创建的,它提供了丰富的配置项和方法,以满足各种需求。而多选功能的实现则主要依赖于`checkboxModel`配置。通过设置`checkboxModel`,我们可以启用树节点的复选框...

    ext grid tree 应用

    在EXT JS框架中,"ext grid tree 应用"是一个常见的功能组合,它结合了Grid面板和Tree面板的优势,用于展示复杂的数据结构。Grid通常用于显示二维表格数据,而Tree则用于展示层次化的数据。在这个例子中,开发者通过...

    JSP EXT 遍历 TREE

    EXT提供了丰富的组件库,其中就包括TREE组件,它允许展示和操作数据结构为树形的视图。在这个场景中,"JSP EXT 遍历 TREE"涉及到的是如何在JSP页面上使用EXT框架来遍历和操作TREE组件。 首先,EXT-all.css和ext-all...

    Ext.ux.tree.treegrid异步加载

    本文详细介绍了如何使用ExtJS中的`Ext.ux.tree.TreeGrid`组件实现异步加载功能,包括前端配置和后端数据处理两个方面。通过这种方式可以有效提升用户体验,同时减轻服务器的压力。在实际开发过程中,还需要根据具体...

    Ext.Tree.Panel

    `Ext.Tree.Panel`是EXT JS库中的一个重要组件,用于展示层次结构的数据,通常用作树形菜单或文件系统目录的视图。这个组件是EXT JS框架中用于创建交互式、可扩展的树结构的工具。以下是对`Ext.Tree.Panel`相关知识的...

    Ext Tree示例

    Ext Tree 是 Ext JS 库中的一个组件,它用于在用户界面上展示层次化的数据结构,类似于文件系统的目录结构。在给定的资源中,我们有多个 HTML 文件(tree2.html, tres.html, s1.html, tree.html)和 JavaScript 文件...

    ext4 四种常见的tree

    EXT4支持多种数据结构,其中包括了描述文件系统树形结构的“tree”概念。在EXT4中,文件和目录被组织成一棵层次化的树形结构,允许快速地查找、创建和管理文件。 在编程和用户界面设计中,"tree"通常指的是可视化...

    EXT Tree的简单实践

    EXT Tree 是一个基于 ExtJS 库的组件,用于构建可交互的树形数据结构。在 Web 开发中,树形控件常用于展示层级关系的数据,例如目录结构、组织架构或者菜单系统。EXT Tree 提供了丰富的功能和高度自定义的选项,使其...

    EXT TREE 扩展CHECKBOX JS

    EXT TREE扩展CHECKBOX JS是一种在EXT JS框架下对树形组件(Tree Panel)进行增强,实现复选框功能的技术。EXT JS是一个强大的JavaScript GUI库,它提供了丰富的组件和功能,用于构建复杂的Web应用程序。在EXT JS中,...

    Ext tree json 动态加载完美实例

    Ext JS是一种强大的JavaScript库,用于构建富客户端应用,而Tree Panel则是展示层次结构数据的一种组件。在后台数据交互中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,...

    extTree例子点击出现等

    ExtTree是Ext JS库中的一个组件,用于创建和展示树形结构的数据。它在Web应用程序中广泛使用,特别是在需要组织和导航层次结构信息时。在本案例中,“extTree例子点击出现界面”指的是用户在浏览ExtTree时,通过点击...

    Ext框架结构 Ext目录结构

    标签"Ext框架结构"和"Ext目录结构"分别对应了框架的逻辑结构和物理结构。逻辑结构是指类和对象的组织方式,而目录结构则是指源代码在硬盘上的文件和目录布局。在Ext框架中,源码通常按照模块进行划分,比如`ext-all....

    ext-tree.rar_ext_ext tr_ext tre_ext.tr_ext.tree

    【标题】"ext-tree.rar_ext_ext tr_ext tre_ext.tr_ext.tree" 暗示这是一个关于Ext JS库中TreePanel组件的实例,其中可能包含了用于创建和管理数据结构的树形视图,以及与数据库交互的功能。 【描述】"ext的树的...

    Ext TreePanel Checked Ext复选框树

    复选框树(Checked Tree)允许用户通过复选框来选择或取消选择树结构中的节点。这种功能对于需要用户进行多级选择的情况非常有用,例如在权限管理、目录结构操作或者配置设置中。以下是对这个特性的详细解释: 1. *...

    ext tree 分页

    在EXT JS框架中,"ext tree 分页"是一种优化技术,用于处理大量数据时避免页面卡顿的问题。在EXT JS的树形组件(TreePanel)中,如果一次性加载所有节点,特别是当树结构非常深或者节点数量巨大时,不仅会消耗大量...

Global site tag (gtag.js) - Google Analytics