EXTJS多选下拉树

本组件是由单选下拉数改的,单选下拉树博客地址:http://blog.csdn.net/hao_ds/article/details/50522058


/**
 *下拉树类(Jelly)
 */
Ext.define('Ext.ux.TreeCombox', {
    extend: 'Ext.form.field.Picker',
    xtype: 'treecombox',
    triggerCls: Ext.baseCSSPrefix + 'form-arrow-trigger',
    config: {
        displayField: null,
        columns: null,
        rootVisible: true,
        selectOnTab: true,
        firstSelected: false,
        maxPickerWidth: 300,
        maxPickerHeight: 360,
        minPickerHeight: 100
    },
    editable: false,
    initComponent: function () {
        var me = this;
        me.callParent(arguments);
        this.addEvents('select');
        me.store.on('load', me.onLoad, me);

    },
    createPicker: function () {
        var me = this,
            picker = Ext.create('Ext.tree.Panel', {
                store: me.store,
                floating: true,
                hidden: true,
                width: me.maxPickerWidth,
                displayField: me.displayField,
                columns: me.columns,
                maxHeight: me.maxTreeHeight,
                shadow: false,
                rootVisible: me.rootVisible,
                manageHeight: false,
                listeners: {
                    itemclick: Ext.bind(me.onItemClick, me)
                },
                viewConfig: {
                    listeners: {
                        render: function (view) {
                            view.getEl().on('keypress', me.onPickerKeypress, me);
                        }
                    }
                }
            }),
            view = picker.getView();

        view.on('render', me.setPickerViewStyles, me);
        if (Ext.isIE9 && Ext.isStrict) {
            view.on('highlightitem', me.repaintPickerView, me);
            view.on('unhighlightitem', me.repaintPickerView, me);
            view.on('afteritemexpand', me.repaintPickerView, me);
            view.on('afteritemcollapse', me.repaintPickerView, me);
        }
        return picker;
    },
    setPickerViewStyles: function (view) {
        view.getEl().setStyle({
            'min-height': this.minPickerHeight + 'px',
            'max-height': this.maxPickerHeight + 'px'
        });
    },
    repaintPickerView: function () {
        var style = this.picker.getView().getEl().dom.style;
        style.display = style.display;
    },
    alignPicker: function () {
        var me = this,
            picker;

        if (me.isExpanded) {
            picker = me.getPicker();
            if (me.matchFieldWidth) {
                picker.setWidth(this.picker.getWidth());
            }
            if (picker.isFloating()) {
                me.doAlign();
            }
        }
    },
    onItemClick: function (view, record, node, rowIndex, e) {

        if (record.isLeaf()) {
            var checked = !record.data.checked;
            record.set('checked', checked);
            //this.onCheckChange(record, checked);
            this.selectItem(record);

        }

    },
    onPickerKeypress: function (e, el) {
        var key = e.getKey();

        if (key === e.ENTER || (key === e.TAB && this.selectOnTab)) {
            this.selectItem(this.picker.getSelectionModel().getSelection()[0]);
        }
    },
    selectItem: function (record) {
        var me = this;
        var records = me.picker.getView().getChecked();     //当前所有选中节点
        values = [];
        Ext.Array.each(records,
        function (rec) {
            //names.push(rec.get('text'));
            values.push(rec.get('id'));
        });
        me.setValue(values.join(','));

        //me.setValue(record.get(this.valueField || 'id'));
        me.picker.hide();
        me.inputEl.focus();
        me.fireEvent('select', me, record)
    },

    onExpand: function () {
        var me = this,
            picker = me.picker,
            view = picker.getView(),
            store = picker.store,
            value = me.value,
            node;
        var records = me.picker.getView().getChecked();     //当前所有选中节点

        //取消选择当前已选择节点
        Ext.Array.each(records,
            function (rec) {
                rec.set('checked', false);
            });


        var valueList = value.split(',');
        if (valueList.length > 0) {

            for (var i = 0; i < valueList.length; i++) {
                node = store.getNodeById(valueList[i]);
                node.set('checked', true);
                var nodePath = node.getPath('id');
                picker.getComponentLayout().owner.expandPath(nodePath, 'id');
            }
        }


        Ext.defer(function () {
            view.focus();
        }, 1);
    },

    //onExpand: function () {
    //    var me = this,
    //        picker = me.picker,
    //        store = picker.store,
    //        value = me.value;
    //    if (value) {
    //        var node = store.getNodeById(value);
    //        if (node)
    //            picker.selectPath(node.getPath());
    //    } else {
    //        var hasOwnProp = me.store.hasOwnProperty('getRootNode');
    //        if (hasOwnProp)
    //            picker.getSelectionModel().select(store.getRootNode());
    //    }

    //    Ext.defer(function () {
    //        picker.getView().focus();
    //    }, 1);
    //},



    setValue: function (value) {
        var me = this, record;
        me.value = value;
        if (me.store.loading) {
            return me;
        }
        try {
            var rawValueList = new Array();
            if (value) {
                var valueList = value.split(',');
                for (var i = 0; i < valueList.length; i++) {
                    var rec = me.store.getNodeById(valueList[i]);
                    if (rec)
                        rawValueList[i] = rec.get(me.displayField)
                }

                me.setRawValue(rawValueList.join());
                //var hasOwnProp = me.store.hasOwnProperty('getRootNode');
                //record = value ? me.store.getNodeById(value) : (hasOwnProp ? me.store.getRootNode() : null);
                //me.setRawValue(record ? record.get(this.displayField) : '');
            } else {
                me.setRawValue('');
            }
        } catch (e) {
            me.setRawValue('');
        }

        return me;
    },
    getValue: function () {
        return this.value;
    },
    onLoad: function (store, node, records) {
        var value = this.value;
        if (value) {
            this.setValue(value);
        } else {
            if (this.firstSelected) {
                if (records && records.length > 0) {
                    var record = records[0];
                    this.setValue(record.get(this.valueField));
                }
            }
        }
    },
    getSubmitData: function () {
        var me = this,
            data = null;
        if (!me.disabled && me.submitValue) {
            data = {};
            data[me.getName()] = '' + me.getValue();
        }
        return data;
    },
    onTriggerClick: function () {
        var me = this;
        //me.store.load();
        if (!me.readOnly && !me.disabled) {
            if (me.isExpanded) {
                me.collapse();
            } else {
                me.expand();
            }
            me.inputEl.focus();
        }
    }
});


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值