`

EXT自定义下拉树形控件

EXT 
阅读更多
  Ext的树形是大家都非常熟悉也是非常喜爱的东西,笔者第一次使用Ext的原因就是因为Ext能够很简单的构建树形,同时Ext也有他的弊端,如果要使用Ext结合美工制作的页面来写系统是一件很麻烦的事情。

      结合Ext的下拉选择控件来自定义一个树形控件这样也是一个非常实用而且很美工的控件,自己琢磨了一下,给代码贴出来和大家共享!
Ext.TreeComboField=Ext.extend(Ext.form.TriggerField,{   
     valueField:"id",   
     displayField:"name",   
     haveShow:false,   
     editable:false,   
     onTriggerClick : function(){   
        if(!this.tree.rendered)   
        {   
        this.treeId = Ext.id();   
        panel.id = this.treeId;   
        this.getEl().dom.parentNode.appendChild(panel);   
        this.tree.render(this.treeId);   
        this.tree.setWidth(this.width);   
        this.tree.getEl().alignTo(this.getEl(), "tl-bl");      
        }       
        this.tree.show();   
     },   
     initComponent : function(){   
        Ext.TreeComboField.superclass.initComponent.call(this);   
          
     },   
     onRender : function(ct, position){   
        Ext.TreeComboField.superclass.onRender.call(this, ct, position);           
        this.tree.on("click",this.choice,this);   
        if(this.hiddenName){   
            this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: (this.hiddenId||this.hiddenName)},   
                    'before', true);   
            this.hiddenField.value =   
                this.hiddenValue !== undefined ? this.hiddenValue :this.value !== undefined ? this.value : '';   
            this.el.dom.removeAttribute('name');   
        }   
         if(!this.editable){   
            this.editable = true;   
            this.setEditable(false);   
        }   
     },   
     getValue : function(){          
       return typeof this.value != 'undefined' ? this.value : '';           
    },   
    clearValue : function(){   
        if(this.hiddenField){   
            this.hiddenField.value = '';   
        }   
        this.setRawValue('');   
        this.lastSelectionText = '';   
        this.applyEmptyText();   
    },   
    readPropertyValue:function(obj,p)   
    {   
        var v=null;   
        for(var o in obj)   
        {   
            if(o==p)v=obj[o];   
        }   
        return v;   
    },   
    setValue : function(obj){      
        if(!obj){   
            this.clearValue();   
            return;   
        }   
        var v=obj;     
        var text = v;   
        var value=this.valueField||this.displayField;   
       if(typeof v=="object" && this.readPropertyValue(obj,value)){   
            text=obj[this.displayField||this.valueField];   
            v=obj[value];          
        }   
        var node = this.tree.getNodeById(v);         
        if(node){   
                text = node.text;   
            }else if(this.valueNotFoundText !== undefined){   
                text = this.valueNotFoundText;   
            }   
        this.lastSelectionText = text;   
        if(this.hiddenField){   
            this.hiddenField.value = v;   
        }   
       Ext.TreeComboField.superclass.setValue.call(this, text);   
       this.value = v;   
    },   
     setEditable : function(value){   
        if(value == this.editable){   
            return;   
        }   
        this.editable = value;   
        if(!value){   
            this.el.dom.setAttribute('readOnly', true);   
            this.el.on('mousedown', this.onTriggerClick,  this);   
            this.el.addClass('x-combo-noedit');   
        }else{   
            this.el.dom.setAttribute('readOnly', false);   
            this.el.un('mousedown', this.onTriggerClick,  this);   
            this.el.removeClass('x-combo-noedit');   
        }   
    },   
    choice:function(node,eventObject)   
    {   
    if(node.id!="root") this.setValue(node.id);   
    else this.clearValue();   
    this.tree.hide();   
    },         
    onDestroy : function(){   
    if(this.tree.rendered){   
       this.tree.getEl().remove();   
      }   
    Ext.TreeComboField.superclass.onDestroy.call(this);   
    }   
});   
Ext.reg('treecombo', Ext.TreeComboField);  


扩展后的自定义控件,使用非常简单,只要将xtype设置成treecombo即可自动生成,选择树中某条记录后会自动从传递一个id,运行后如下:
分享到:
评论

相关推荐

    ext 下拉树demo

    EXT是一个强大的JavaScript框架,它提供了丰富的组件库,包括下拉树(TreePicker)这样的控件。这篇博客文章可能是介绍如何在EXT中实现一个下拉树的功能,并提供了一个名为`TreePicker.js`的代码示例。 EXT框架由...

    [Ext 3.x + Ext 2.x] 下拉树 Ext.ux.ComboBoxTree

    【Ext 3.x + Ext 2.x 下拉树 Ext.ux.ComboBoxTree】是基于ExtJS框架的一个组件,它结合了下拉框(ComboBox)和树形控件(TreePanel)的功能,提供了一种用户友好的选择界面。在网页应用中,这种控件常用于展示层级...

    Extjs4下拉树菜单ComboBoxTree支持单选和多选并且支持展开选中指定节点的通用控件

    在这个特定的情况下,我们讨论的是一个定制的下拉树菜单控件——ComboBoxTree,它在ExtJS4中实现了单选和多选功能,并且具备展开选中指定节点的能力。这个控件在实际项目中已经被广泛使用并证明了其稳定性和实用性,...

    ExtJS下拉列表树控件1

    它提供了丰富的组件库,其中包括下拉列表树控件(ComboBox Tree),这种控件结合了下拉列表和树形结构,使得用户能够在一个下拉菜单中浏览和选择层次化的数据。本文将深入探讨如何在ExtJS中实现下拉列表树控件,并...

    ExtJS下拉列表树控件

    下拉列表树控件结合了下拉框和树结构的特点,用户可以方便地在下拉菜单中展开和选择树形结构的数据。 在ExtJS中,下拉列表树控件通常由两个主要部分组成:`ComboBox` 和 `TreePanel`。`ComboBox` 是基础的下拉框...

    TreeCombo,Ext TreeCombo 树形 下拉框,树形下拉框

    Ext TreeCombo是一种UI组件,它将传统的下拉框与树形控件(Tree)结合起来,提供了一种交互式的、具有层级结构的下拉选择。用户在输入框中输入文字,可以筛选出符合输入的树节点,同时,点击下拉按钮会展示整个树形...

    Ext TreeCombo 树形 下拉框

    这是一个结合了树形结构和下拉框功能的控件,允许用户从一个层次化的数据结构中选择一个或多个项。在ExtJS中,TreePanel用于展示树形数据,而ComboBox则是一个下拉列表选择框。TreeCombo将这两者融合,提供了一种更...

    ExtJS3 实现异步下拉树

    7. **扩展控件**:可能需要创建一个新的组件类,继承自`Ext.form.field.ComboBox`,并覆盖或扩展其默认行为,以实现下拉树的功能。 8. **配置项**:例如,`displayField`定义显示字段,`valueField`定义值字段,`...

    自定义ExtJS控件之下拉树和下拉表格附

    自定义下拉树控件的关键在于重写createPicker方法。在createPicker方法中,我们创建了一个树形面板(Ext.tree.Panel)作为下拉展示的载体。这个树形面板可以配置各种属性,如store(数据存储),根节点是否可见...

    Ext combobox 下拉多选框带搜索功能

    它提供了一套完整的组件模型,其中包括各种UI控件,如按钮、表格、树形视图以及我们这里关注的“ComboBox”(组合框)。`Ext ComboBox`是实现下拉列表功能的基础组件,而“Ext combobox 下拉多选框带搜索功能”则是...

    ExtPanel和其他控件

    TreeNode是树形结构中的基本元素,Leaf属性指示节点是否为叶子节点,即没有子节点。如果是叶子节点,即使存在子节点也不会显示。 Store控件是数据存储的关键,用于管理网格或其他组件的数据源。分页功能可以通过...

    ExtJs4.1带时间选择的日期控件

    它提供了丰富的组件库,包括表格、表单、树形视图、图表等,其中日期和时间选择器是表单元素中的重要组成部分。在描述中提到的“带时间选择的日期控件”,通常指的是`Ext.picker.Date`控件的扩展,这个控件不仅允许...

    Extjs ComboBoxTree 下拉树组件

    文件"ComboBoxTree"可能是实现这一组件的源代码或者配置文件,包含了实现下拉树组件的JavaScript代码和相关的配置信息。如果需要深入了解或修改这个组件,你需要查看这个文件的内容,理解其中的数据结构、事件处理和...

    ExtNet控件使用心得

    TreeNode控件用于构建树形结构的数据展示,`Leaf`属性的设置至关重要: - **Leaf**: 设为`true`时,即便存在子节点,也不会显示为可展开的节点,简化视图,减少不必要的层级感。 #### Store控件分页功能介绍 ...

    Extjs-多功能下拉树列表

    其中,下拉树列表是一种非常实用且常见的控件类型,它结合了下拉列表的便捷性和树形结构的强大组织能力。本文将详细介绍一个基于Extjs框架的“多功能下拉树列表”组件的功能特点及其使用方法。 #### 二、核心功能...

    ext comboboxtree

    EXTJS是一个用JavaScript编写的富客户端应用开发框架,它提供了一系列的可重用UI组件,如表格、树形控件、组合框等。ComboboxTree是这个框架中的一种特殊组件,结合了ComboBox(下拉列表)和TreePanel(树形结构)的...

    EXT_JS实例,官方实例

    1. **EXT JS组件**:EXT JS提供了一系列组件,如按钮(Button)、面板(Panel)、表格(Grid)、树形视图(Tree)、窗口(Window)等。这些组件具有丰富的可定制性和可扩展性,可以满足不同类型的界面需求。 2. **...

    Ext 开发指南 学习资料

    9.1. 下拉树形选择框TreeField 9.2. 带全选的checkbox树形CheckBoxTree 9.3. 带全选的checkbox的grid 9.4. fisheye 9.5. 可以设置时间的日期控件 9.6. JsonView实现用户卡片拖拽与右键菜单 9.7. 下拉列表选择每页...

Global site tag (gtag.js) - Google Analytics