`

EXTJS4下拉选择树

 
阅读更多
extjs4下拉选择树,代码是从网上找到的。
控件源代码:
Ext.define('Ext.tree.ComboTree',{
    extend :"Ext.form.field.Picker",
    alias: 'widget.combotree',
    requires: ['Ext.form.*','Ext.tree.Panel'],
    rootText:this.rootText||'root',
    rootId:this.rootId||'0',
    rootVisible:this.rootVisible||false,//根节点是否可见
    nodeParam:this.nodeParam||'id',
    treeUrl:this.treeUrl,   //这里是点击树前加号须返回的JSON格式节点数据
    multiSelect:this.multiSelect||false,
    fieldName:'category',
    useId:this.useId||true, //是否使用id域,如果不选择,则值直接使用Picker的value值
    selectedIds:'',
    values:'',
    texts:'',
    editable:this.editable||true,//是否可编辑
    leafOnly:this.leafOnly||true, //限定是否只能选择叶子节点
    hiddenField:null,
    resetValues:function(){
        if(this.hiddenField)
            this.hiddenField.setValue('');
        this.values='';
        this.texts='';
        this.setValue('');
    },
    initComponent:function(){
        var self =   this;
        if(self.useId)
            self.hiddenField=Ext.create('Ext.form.field.Hidden',{id:self.fieldName+"Id",name:self.fieldName+"Id"}); //由于Picker本身的value对应的是显示的文本,所以这里我们新建了一个隐藏域,用来保存诸如id等值,而不是直接的文本值,在表单提交的时候,就可以直接使用这个值了
        Ext.apply(self,   {
            pickerAlign :   "tl",
            name:self.fieldName
        });
        self.callParent();
        if(self.useId){
            this.on('afterrender',function(){
                self.ownerCt.add(self.hiddenField);
            },this);
        }
    },
    createPicker   : function() {
        var self = this;
        var   aurl=self.treeUrl;
        if(self.multiSelect){  //这里增加了多选的功能,在后台返回的JSON数据中,应加上checked:true之类的属性
            if(aurl.indexOf("?")==-1)
                aurl+="?multiSelect=true&selectedIds="+self.selectedIds;
            else
                aurl+="&multiSelect=true&selectedIds="+self.selectedIds;
        }
        if(self.leafOnly){
            if(aurl.indexOf("?")==-1)
                aurl+="?leafOnly=true";
            else
                aurl+="&leafOnly=true";
        }

        var store = Ext.create('Ext.data.TreeStore',   {
            proxy : {
                type :   'ajax',
                url :   aurl
            },
            nodeParam:self.nodeParam,
            root:   {
                expanded: true ,
                text:   self.rootText,
                id:self.rootId,
                leaf:false
            },
            autoLoad:true
        });
        self.picker   = new Ext.tree.Panel({
            height :   300,
            autoScroll : true,
            floating :   true,
            focusOnToFront : false,
            shadow :   true,
            ownerCt :   this.ownerCt,
            useArrows : true,
            store   : store,
            rootVisible :   self.rootVisible
        });
        self.picker.on({
            beforehide   : function(p)   {
                self.setValue(self.texts);
                if(self.useId)
                    self.hiddenField.setValue(self.values);
            }
            ,
            itemclick:function(view,record){
                if(self.leafOnly){
                    if(record.get('leaf')) //这里限定只有叶子节点可以选择
                        setToValues(record);
                    else{
                        record.expand();
                    }
                }else{
                    setToValues(record);
                }
                function   setToValues(record){
                    if(!self.multiSelect){
                        self.values=record.get('id');
                        self.texts=record.get('text');
                        self.collapse();
                    }else{
                        var   records = self.picker.getView().getChecked(), ids=[], names =   [];
                        Ext.Array.each(records, function(rec)   {
                            ids.push(rec.get('id'));
                            names.push(rec.get('text'));
                        });
                        self.values=ids.join(',');
                        self.texts=names.join(',');
                    }
                    if(self.useId){
                        self.hiddenField.setValue(self.values);
                    }
                    self.setValue(self.texts);
                }
            }
        });
        return   self.picker;
    },
    alignPicker : function() {
        var   me = this, picker, isAbove, aboveSfx = '-above';
        if   (this.isExpanded) {
            picker =   me.getPicker();
            if (me.matchFieldWidth)   {
                picker.setWidth(me.bodyEl.getWidth());
            }
            if   (picker.isFloating()) {
                picker.alignTo(me.inputEl,   "", me.pickerOffset);
                isAbove = picker.el.getY() <   me.inputEl.getY();
                me.bodyEl[isAbove ? 'addCls' :   'removeCls'](me.openCls+ aboveSfx);
                picker.el[isAbove   ? 'addCls' : 'removeCls'](picker.baseCls+   aboveSfx);
            }
        }
    }
});

使用方法
var tree = Ext.create('Ext.tree.ComboTree',{rootText:'Info Category',fieldLabel:'Category',treeUrl:'/category/listByParentId.do',rootVisible:true,editable:false});

返回数据:
JSONObject result = new JSONObject();
result.put("children",array);

服务端数据和平常一样
String categoryId = request.getParameter("categoryId");
String categoryName = request.getParameter("category");
分享到:
评论

相关推荐

    Extjs4 下拉树 TreeCombo

    ExtJS 4 下拉树(TreeCombo)是一种组合控件,它将传统的下拉框与树形结构结合在一起,提供了一种在有限空间内展示层级数据的高效方式。这种控件在很多场合都非常实用,例如在需要用户选择分类或者层级结构的场景中...

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

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

    extjs4 下拉菜单树 combobox+tree 支持单选多选

    在EXTJS4中,下拉菜单树(ComboBox+Tree)是一种高级UI组件,它结合了ComboBox的下拉选择框和TreePanel的树形结构,提供了一种用户友好的交互方式,用于展示层次化的数据。这种组件特别适用于需要从多个选项中进行...

    ExtJs4.2下拉树(修改版)

    ExtJs4.2没有直接提供下拉树这个组件,但是有例子可以用,文件位置:ext-4.2.1.883\examples\ux\TreePicker.js 但是它有点小毛病吧:默认显示了根节点;达到最小高度时再展开节点,高度不能自动调整。 所以我做了一...

    Extjs下拉多选树

    1. **下拉树组件**:在ExtJS中,树形组件(TreePanel)用于展示层次结构的数据。它支持动态加载、拖放操作、节点展开和折叠等功能。而下拉树是将树形结构嵌入到下拉框中,通常用于选择一组相关的项目,比如文件夹...

    ExtJS4下拉树组件

    在ExtJS4中,下拉树组件(TreeComboBox)是一种特殊的组合框,它结合了下拉列表和树形结构的功能,允许用户通过选择树节点来填充组合框的值。这种组件广泛应用于需要展示分层数据结构的应用场景中。 #### 二、核心...

    extjs4 实现下拉树并支持复选

    总的来说,这个EXTJS4的下拉树组件实现了树形结构的选择,允许用户多选或复选节点。通过自定义事件和方法,我们可以灵活地控制树的显示和用户交互,使其适应项目的具体需求。在实际开发中,可以将此组件引入到你的...

    ExtJs3下拉树

    ExtJs3下拉树 分两种方式调用:第一种: xtype : 'combotree', name : 'dm', fieldLabel : 'dm', tree : this.ct this.ct = new Ext.tree.TreePanel({ autoScroll : true, height : 250, border : false, ...

    Extjs4 下拉树( v1.0版本有bug,已经上传一个可以用的)

    标题中的“Extjs4 下拉树”指的是EXTJS框架中的一个组件,用于实现下拉菜单与树形结构的结合,这种组件通常在需要选择层级结构数据时非常有用,比如地区选择、组织架构选择等。EXTJS是Sencha公司开发的一个...

    ExtJs下拉树

    在ExtJS中,下拉树(ComboBoxTree)是一种结合了下拉框和树结构的组件,它允许用户从一个展开的树形列表中选择值,而不是传统的单行文本输入或简单的下拉列表。这种组件在数据层级结构复杂且需要用户进行多级选择时...

    Extjs4 多选下拉树

    在ExtJS4中,多选下拉树(Multi Select Tree)是一种用户界面组件,它结合了下拉菜单和树形结构,允许用户从层级结构中选择多个项目。这个组件在数据管理、分类选择等场景中非常实用。 在实现多选下拉树时,我们...

    extjs下拉树

    ExtJS下拉树是一种在Web应用中常用的交互组件,它结合了下拉框和树形结构的优点,使得用户可以在一个紧凑的空间内选择嵌套层次的数据。这种组件在数据层级较多,需要用户进行逐级选择或者查看层级关系时非常实用。在...

    extjs2.0 下拉列

    在描述中提到了 "extjs下拉树",这可能是指 `Ext.tree.TreePanel` 结合 `TreeStore` 来实现的下拉树结构。下拉树允许用户从一个下拉框中选择一个树形结构的节点。实现方式是在 `ComboBox` 的配置中添加一个 `tree` ...

    Extjs4.X下comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用

    综上所述,ExtJS 4.x的ComboboxTree组件是实现下拉树形菜单的强大工具,它结合了下拉框的简洁和树结构的层次感,提供了丰富的定制选项,能满足多种场景下的需求。理解并熟练掌握其用法,将极大地提升开发效率和用户...

    ExtJS下拉列表树控件

    总结起来,ExtJS下拉列表树控件的应用涉及到多个知识点,包括但不限于数据源的构建、ComboBox Tree的配置、GridPanel的编辑功能、事件监听及处理,以及在具体场景中的问题解决。通过理解这些概念并实践,可以创建出...

    Extjs6中利用treePicker实现的下拉树中

    利用extjs6自带的treePicker插件,实现下拉树的效果

    ExtJs4实现下拉树选择框ComboTree

    ### ExtJs4 实现下拉树选择框 ComboTree #### 概述 在现代Web应用开发中,ExtJS 是一个非常强大的JavaScript库,用于构建复杂的客户端应用程序。它提供了丰富的组件库,使得开发者能够轻松地创建出功能丰富且交互性...

    extjs树形下拉框treeField

    extjs 树形下拉列表框,可以进行数据选择,数据回显。

    Extjs自定义组件-下拉树

    ### Extjs自定义组件——下拉树:深入解析与实现 在现代Web开发中,Extjs作为一款功能强大且灵活的框架,深受开发者喜爱。它提供了丰富的UI组件库,能够帮助开发者快速构建复杂的用户界面。其中,自定义组件是Extjs...

    Extjs4 下拉树

    使用方法: var comb = Ext.create('Ext.ux.ComboTree',{ name:'xzqh', dicName:'test', width : 270, fieldLabel : '行政区划', url:'getDic', all:true, labelWidth : 60, multiple:true ...

Global site tag (gtag.js) - Google Analytics