Extjs Can';无法在新插件中的复选框标签和复选框框之间同步

Extjs Can';无法在新插件中的复选框标签和复选框框之间同步,extjs,Extjs,我已经创建了一个新插件,它扩展了另一个扩展类型。 问题是 当我点击组合中的“全部”选项时,禁用值也被选中 当我点击组合列表中复选框的标签时,勾选框并没有出现,当我点击该框时,它工作正常 下面是我扩展的代码 Ext.define('Ext.ux.CheckCombo', { extend: 'Ext.form.field.ComboBox', alias: 'widget.checkcombo', multiSelect: true, allSelecto

我已经创建了一个新插件,它扩展了另一个扩展类型。 问题是

  • 当我点击组合中的“全部”选项时,禁用值也被选中

  • 当我点击组合列表中复选框的标签时,勾选框并没有出现,当我点击该框时,它工作正常

  • 下面是我扩展的代码

        Ext.define('Ext.ux.CheckCombo',
    {
    
        extend: 'Ext.form.field.ComboBox',
        alias: 'widget.checkcombo',
        multiSelect: true,
        allSelector: false,
        noData: false,
        noDataText: '',
        addAllSelector: false,
        allSelectorHidden: false,
        enableKeyEvents: true,
        afterExpandCheck: false,
        allText: 'All',
        oldValue: '',
        //matchFieldWidth: true,
        //listConfig: {minWidth: 50},
        listeners:
        {
    /* uncomment if you want to reload store on every combo expand
            beforequery: function(qe)
            {
                this.store.removeAll();
                delete qe.combo.lastQuery;
            },
    */
            focus: function(cpt)
            {
    
                cpt.oldValue = cpt.getValue();
            },
            keydown: function(cpt, e, eOpts)
            {
                var    value = cpt.getRawValue(),
                    oldValue = cpt.oldValue;
    
                // below line is commented bcz  we are getting  value as data  and  oldvalue  as ids
               // if(value != oldValue) cpt.setValue('');
            }
        },
        createPicker: function()
        {
            var    me = this,
                picker,
                menuCls = Ext.baseCSSPrefix + 'menu',
                opts = Ext.apply(
                {
                    pickerField: me,
                    selModel:
                    {
                        mode: me.multiSelect ? 'SIMPLE' : 'SINGLE'
                    },
                    floating: true,
                    hidden: true,
                    ownerCt: me.ownerCt,
                    cls: me.el.up('.' + menuCls) ? menuCls : '',
                    store: me.store,
                    displayField: me.displayField,
                    focusOnToFront: false,
                    pageSize: me.pageSize,
                    tpl:
                    [
                        '<ul><tpl for=".">',
                            '<li role="option"   class="' + Ext.baseCSSPrefix + 'boundlist-item"><span class="x-combo-checker">&nbsp;</span> {' + me.displayField + '}</li>',
                        '</tpl></ul>'
                    ]
                }, me.listConfig, me.defaultListConfig);
    
    
            picker = me.picker = Ext.create('Ext.view.BoundList', opts);
            if(me.pageSize)
            {
                picker.pagingToolbar.on('beforechange', me.onPageChange, me);
            }        
    
    
            me.mon(picker,
            {
                itemclick: me.onItemClick,
                refresh: me.onListRefresh,
                scope: me
            });
    
    
            me.mon(picker.getSelectionModel(),
            {
                'beforeselect': me.onBeforeSelect,
                'beforedeselect': me.onBeforeDeselect,
                'selectionchange': me.onListSelectionChange,
                scope: me
            });
    
    
            me.store.on('load', function(store)
            {
                if(store.getTotalCount() == 0)
                {
                    me.allSelectorHidden = true;
                    if(me.allSelector != false) me.allSelector.setStyle('display', 'none');
                    if(me.noData != false) me.noData.setStyle('display', 'block');
                }
                else
                {
                    me.allSelectorHidden = false;
                    if(me.allSelector != false) me.allSelector.setStyle('display', 'block');
                    if(me.noData != false) me.noData.setStyle('display', 'none');
                }
            });
    
    
            return picker;
        },
        reset: function()
        {
            var    me = this;
    
    
            me.setValue('');
        },
        setValue: function(value)
        {
            this.value = value;
            if(!value)
            {
                if(this.allSelector != false) this.allSelector.removeCls('x-boundlist-selected');
                return this.callParent(arguments);
            }
    
    
            if(typeof value == 'string')
            {
                var    me = this,
                    records = [],
                    vals = value.split(',');
    
                if(value == '')
                {
                    if(me.allSelector != false) me.allSelector.removeCls('x-boundlist-selected');
                }
                else
                {
                    if(vals.length == me.store.getCount() && vals.length != 0)
                    {
                        if(me.allSelector != false) me.allSelector.addCls('x-boundlist-selected');
                        else me.afterExpandCheck = true;
                    }
                }
    
    
                Ext.each(vals, function(val)
                {
                    var record = me.store.getById(parseInt(val));
                    if(record) records.push(record);
                });
    
    
                return me.setValue(records);
            }
            else return this.callParent(arguments);
        },
        getValue: function()
        {
            if(typeof this.value == 'object') return this.value.join(',');
            else return this.value;
        },
        getSubmitValue: function()
        {
            return this.getValue();
        },
        expand: function()
        {
            var    me = this,
                bodyEl, picker, collapseIf;
    
    
                if(me.rendered && !me.isExpanded && !me.isDestroyed)
                {
                bodyEl = me.bodyEl;
                picker = me.getPicker();
                collapseIf = me.collapseIf;
    
    
                // show the picker and set isExpanded flag
                picker.show();
                me.isExpanded = true;
                me.alignPicker();
                bodyEl.addCls(me.openCls);
    
                if(me.noData == false) me.noData = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin', '<div class="x-boundlist-item" role="option">'+me.noDataText+'</div>', true);
                if(me.addAllSelector == true && me.allSelector == false)
                {
                    var selectedvalues =  this.value ;
                      var vals =  String(selectedvalues).split(",");
                    if(vals.length == me.store.getCount() && vals.length != 0)
                    {
                    me.allSelector = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin', '<div class="x-boundlist-item x-boundlist-selected" role="option"><span class="x-combo-checker">&nbsp;</span> '+me.allText+'</div>', true);
                    }
                    else
                    {
                     me.allSelector = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin', '<div class="x-boundlist-item" role="option"><span class="x-combo-checker">&nbsp;</span> '+me.allText+'</div>', true);
                    }
                    me.allSelector.on('click', function(e)
                    {
                        if(me.allSelector.hasCls('x-boundlist-selected'))
                        {
                            me.allSelector.removeCls('x-boundlist-selected');
                            me.setValue('');
                            me.fireEvent('select', me, []);
                        }
                        else
                        {
                            var records = [];
                            me.store.each(function(record)
                            {
                                records.push(record);
                            });
                            me.allSelector.addCls('x-boundlist-selected');
                            me.select(records);
                            me.fireEvent('select', me, records);
                        }
                    });
    
    
                    if(me.allSelectorHidden == true) me.allSelector.hide();
                    else me.allSelector.show();
    
                    if(me.afterExpandCheck == true)
                    {
                        me.allSelector.addCls('x-boundlist-selected');
                        me.afterExpandCheck = false;
                    }
                }
    
    
                // monitor clicking and mousewheel
                me.mon(Ext.getDoc(),
                {
                    mousewheel: collapseIf,
                    mousedown: collapseIf,
                    scope: me
                });
                Ext.EventManager.onWindowResize(me.alignPicker, me);
                me.fireEvent('expand', me);
                me.onExpand();
            }
            else
            {
                me.fireEvent('expand', me);
                me.onExpand();
            }
        },
        alignPicker: function()
        {    
            var me = this,
                picker = me.getPicker();
    
    
            me.callParent();
    
            if(me.addAllSelector == true)
            {
                var height = picker.getHeight();
                //alert(height);
                height = parseInt(height)+25;
                picker.setHeight(height);
               picker.getEl().setStyle('height', height+'px');
            }
        },
        onListSelectionChange: function(list, selectedRecords)
        {
            var    me = this,
                isMulti = me.multiSelect,
                hasRecords = selectedRecords.length > 0;
            // Only react to selection if it is not called from setValue, and if our list is
            // expanded (ignores changes to the selection model triggered elsewhere)
            if(!me.ignoreSelection && me.isExpanded)
            {
                if(!isMulti)
                {
                    Ext.defer(me.collapse, 1, me);
                }
                /*
                * Only set the value here if we're in multi selection mode or we have
                * a selection. Otherwise setValue will be called with an empty value
                * which will cause the change event to fire twice.
                */
                if(isMulti || hasRecords)
                {
                    me.setValue(selectedRecords, false);
                }
                if(hasRecords)
                {
                    me.fireEvent('select', me, selectedRecords);
                }
                me.inputEl.focus();
    
                if(me.addAllSelector == true && me.allSelector != false)
                {
                    if(selectedRecords.length == me.store.getTotalCount()) me.allSelector.addCls('x-boundlist-selected');
                    else me.allSelector.removeCls('x-boundlist-selected');
                }
            }
        }
    });
    
    Ext.define('Ext.ux.CheckCombo',
    {
    扩展:“Ext.form.field.ComboBox”,
    别名:“widget.checkcombo”,
    多选:对,
    allSelector:false,
    野田:错,
    noDataText:“”,
    addAllSelector:false,
    allSelectorHidden:false,
    enableKeyEvents:true,
    检查后:错误,
    allText:'所有',
    旧值:“”,
    //matchFieldWidth:对,
    //listConfig:{minWidth:50},
    听众:
    {
    /*如果要在每个组合展开时重新加载存储,请取消注释
    查询前:函数(qe)
    {
    this.store.removeAll();
    删除qe.combo.lastQuery;
    },
    */
    焦点:功能(cpt)
    {
    cpt.oldValue=cpt.getValue();
    },
    向下键:功能(cpt、e、eOpts)
    {
    var value=cpt.getRawValue(),
    oldValue=cpt.oldValue;
    //下面一行是注释bcz,我们得到的值是数据,旧值是ID
    //如果(值!=oldValue)cpt.setValue(“”);
    }
    },
    createPicker:函数()
    {
    var me=这个,
    皮克,
    menuCls=Ext.baseCSSPrefix+“菜单”,
    opts=Ext.apply(
    {
    皮克菲尔德:我,
    selModel:
    {
    模式:me.multiSelect?'SIMPLE':'SINGLE'
    },
    浮动:是的,
    隐藏:是的,
    所有者:我,所有者,
    cls:me.el.up('.'+菜单)?菜单:“”,
    商店:我,商店,
    displayField:me.displayField,
    focusOnToFront:错误,
    pageSize:me.pageSize,
    第三方物流:
    [
    “
      ”, “
    • {'+me.displayField+}
    • ”, “
    ” ] },me.listConfig,me.defaultListConfig); picker=me.picker=Ext.create('Ext.view.BoundList',opts); 如果(我的页面大小) { picker.pagingToolbar.on('beforechange',me.onPageChange,me); } 我,蒙(皮克, { itemclick:me.onItemClick, 刷新:me.onListRefresh, 范围:我 }); me.mon(picker.getSelectionModel(), { “beforeselect”:me.onBeforeSelect, “beforedeselect”:me.onBeforeDeselect, “selectionchange”:me.onListSelectionChange, 范围:我 }); me.store.on('load',函数(store) { if(store.getTotalCount()==0) { me.allSelectorHidden=true; 如果(me.allSelector!=false)me.allSelector.setStyle('display','none'); 如果(me.noData!=false)me.noData.setStyle('display','block'); } 其他的 { me.allSelectorHidden=false; 如果(me.allSelector!=false)me.allSelector.setStyle('display','block'); 如果(me.noData!=false)me.noData.setStyle('display','none'); } }); 回程选择器; }, 重置:函数() { var me=这个; me.setValue(“”); }, 设置值:函数(值) { 这个值=值; 如果(!值) { 如果(this.allSelector!=false)this.allSelector.removeCls('x-boundlist-selected'); 返回this.callParent(参数); } 如果(值的类型=='string') { var me=这个, 记录=[], VAL=value.split(','); 如果(值=“”) { 如果(me.allSelector!=false)me.allSelector.removeCls('x-boundlist-selected'); } 其他的 { if(vals.length==me.store.getCount()&&vals.length!=0) { 如果(me.allSelector!=false)me.allSelector.addCls('x-boundlist-selected'); else me.afterExpandCheck=true; } } Ext.each(val,函数(val) { var record=me.store.getById(parseInt(val)); if(记录)记录。推送(记录); }); 返回我.setValue(记录); } 否则返回this.callParent(参数); }, getValue:function() { if(typeof this.value=='object')返回this.value.join(','); 否则返回此.value; }, getSubmitValue:函数() { 返回这个.getValue(); }, 展开:函数() { var me=这个, bodyEl、picker、collapseIf; 如果(me.rendered&&!me.isExpanded&&!me.isDestroyed) { bodyEl=me.bodyEl; picker=me.getPicker(); collapseIf=me.collapseIf; //显示选择器并设置isExpanded标志 picker.show(); me.isExpanded=true; me.alignPicker(); bodyEl.addCls(me.openCls); 如果(me.noData==false)me.noData=picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforebeagin',''+me.noDataText+'',true); if(me.addAllSelector==true&&me.allSelector==false) { var selectedvalues=此.value; var VAL=字符串(selectedvalues)。拆分(“,”; if(vals.length==me.store.getCount()&&vals.length!=0) {
        Ext.define('Ext.ux.PermissionCheckCombo',{
        extend: 'Ext.ux.CheckCombo',                
        alias: 'widget.permissioncheckcombo',  
        frame: false,
        createPicker: function()
        {
            var me = this,
            picker,
            menuCls = Ext.baseCSSPrefix + 'menu',
            opts = Ext.apply(
            {
                pickerField: me,
                selModel:
                {
                    mode: me.multiSelect ? 'SIMPLE' : 'SINGLE'
                },
                floating: true,
                hidden: true,            
                ownerCt: me.ownerCt,
                cls: me.el.up('.' + menuCls) ? menuCls : '',
                store: me.store,
                displayField: me.displayField,
                focusOnToFront: false,
                pageSize: me.pageSize,
                disableField: me.disableField,
                bind: {
                    store: this.store
                },
                 listeners: {                           
                        beforeselect: function(combo, record, index ) {
                            if (record.get(me.disableField) != 0) {
                                // combo.setValue(record.get(me.displayField));
                                // combo.setValue(record.get(me.displayField));
                                // console.log(combo);
                            } else {                            
                                return false;
                            }
                            // Cancel the default action
                        }
    
                    },
    
                tpl:
                [
                    '<ul><tpl for=".">',
                    //    '<li role="option"   class="' + Ext.baseCSSPrefix + 'boundlist-item"><span class="x-combo-checker">&nbsp;</span> {' + me.displayField + '}</li>',
                    '<tpl if=" ' + me.disableField + ' &gt; 0 ">',
                      '<li role="option"   class="' + Ext.baseCSSPrefix + 'boundlist-item"><span><input type="checkbox"/>&nbsp;</span> {' + me.displayField + '}</li>',
                    '<tpl else>',
                     '<li role="option"   class="' + Ext.baseCSSPrefix + 'boundlist-item" ><span><input type="checkbox" disabled="disabled"/>&nbsp;</span> {' + me.displayField + '}</li>',
                    '</tpl>',
                  /*  '<div class="x-boundlist-item">',
                        '<tpl if=" ' + this.disableField + ' == false ">',
                           '<div class="nowrap">',
                               '<input type="checkbox"/>',
                                   '{',
                                       this.displayField,
                                   '}',
                           '</div>',
                       '</tpl>',
                       '<tpl if=" ' + this.disableField + ' == true ">',
                           '<div class="nowrap">',
                               '<input type="checkbox" disabled="disabled" />',
                                   '{',
                                       this.displayField,
                                   '}',
                           '</div>',
                       '</tpl>',
                    '</div>', */
                '</tpl></ul>'
    
                ]
            }, me.listConfig, me.defaultListConfig);
    
    
            picker = me.picker = Ext.create('Ext.view.BoundList', opts);
            if(me.pageSize)
            {
                picker.pagingToolbar.on('beforechange', me.onPageChange, me);
            }        
    
    
            me.mon(picker,
            {
                itemclick: me.onItemClick,
                refresh: me.onListRefresh,
                scope: me
            });
    
    
            me.mon(picker.getSelectionModel(),
            {
                'beforeselect': me.onBeforeSelect,
                'beforedeselect': me.onBeforeDeselect,
                'selectionchange': me.onListSelectionChange,
                scope: me
            });
    
    
            me.store.on('load', function(store)
            {
                if(store.getTotalCount() == 0)
                {
                    me.allSelectorHidden = true;
                    if(me.allSelector != false) me.allSelector.setStyle('display', 'none');
                    if(me.noData != false) me.noData.setStyle('display', 'block');
                }
                else
                {
                    me.allSelectorHidden = false;
                    if(me.allSelector != false) me.allSelector.setStyle('display', 'block');
                    if(me.noData != false) me.noData.setStyle('display', 'none');
                }
            });
    
            return picker;
        },
    
        expand: function()
        {
            var    me = this,
                bodyEl, picker, collapseIf;
    
    
                if(me.rendered && !me.isExpanded && !me.isDestroyed)
                {
                bodyEl = me.bodyEl;
                picker = me.getPicker();
                collapseIf = me.collapseIf;
    
    
                // show the picker and set isExpanded flag
                picker.show();
                me.isExpanded = true;
                me.alignPicker();
                bodyEl.addCls(me.openCls);
    
                if(me.noData == false) me.noData = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin', '<div class="x-boundlist-item" role="option">'+me.noDataText+'</div>', true);
                if(me.addAllSelector == true && me.allSelector == false)
                {
                    var selectedvalues =  this.value ;
                      var vals =  String(selectedvalues).split(",");
                    if(vals.length == me.store.getCount() && vals.length != 0)
                    {
                    me.allSelector = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin', '<div class="x-boundlist-item x-boundlist-selected" role="option"><span ><input type="checkbox"/>&nbsp;</span> '+me.allText+'</div>', true);
                    }
                    else
                    {
                     me.allSelector = picker.getEl().down('.x-boundlist-list-ct').insertHtml('beforeBegin', '<div class="x-boundlist-item" role="option"><span ><input type="checkbox"/>&nbsp;</span> '+me.allText+'</div>', true);
                    }
                    me.allSelector.on('click', function(e)
                    {
                        if(me.allSelector.hasCls('x-boundlist-selected'))
                        {
                            me.allSelector.removeCls('x-boundlist-selected');
                            me.setValue('');
                            me.fireEvent('select', me, []);
                        }
                        else
                        {
                            var records = [];
                            me.store.each(function(record)
                            {
                                records.push(record);
                            });
                            me.allSelector.addCls('x-boundlist-selected');
                            me.select(records);
                            me.fireEvent('select', me, records);
                        }
                    });
    
    
                    if(me.allSelectorHidden == true) me.allSelector.hide();
                    else me.allSelector.show();
    
                    if(me.afterExpandCheck == true)
                    {
                        me.allSelector.addCls('x-boundlist-selected');
                        me.afterExpandCheck = false;
                    }
                }
    
    
                // monitor clicking and mousewheel
                me.mon(Ext.getDoc(),
                {
                    mousewheel: collapseIf,
                    mousedown: collapseIf,
                    scope: me
                });
                Ext.EventManager.onWindowResize(me.alignPicker, me);
                me.fireEvent('expand', me);
                me.onExpand();
            }
            else
            {
                me.fireEvent('expand', me);
                me.onExpand();
            }
        },
    });