Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS 4 CheckboxModel在使用多模式时如何允许取消选择_Extjs_Extjs4 - Fatal编程技术网

ExtJS 4 CheckboxModel在使用多模式时如何允许取消选择

ExtJS 4 CheckboxModel在使用多模式时如何允许取消选择,extjs,extjs4,Extjs,Extjs4,我们在应用程序中使用checkboxmodel,它要求允许选择网格中的多个项目。因此,我们必须在复选框模型中设置模式:“MULTI” 默认行为要求用户在使用此配置时按住CTRL键并单击某个项以取消选择该项。我希望覆盖默认行为,允许用户通过再次单击来取消选择列表中的项目。checkboxModel的allowDeselect配置只能在模式设置为SINGLE时使用,同样,我们使用的是MULTI 非常感谢任何关于在ExtJS 4中重写此行为的建议 你是说模式:“简单” :String选择模式。有效值为

我们在应用程序中使用checkboxmodel,它要求允许选择网格中的多个项目。因此,我们必须在复选框模型中设置模式:“MULTI”

默认行为要求用户在使用此配置时按住CTRL键并单击某个项以取消选择该项。我希望覆盖默认行为,允许用户通过再次单击来取消选择列表中的项目。checkboxModel的allowDeselect配置只能在模式设置为SINGLE时使用,同样,我们使用的是MULTI


非常感谢任何关于在ExtJS 4中重写此行为的建议

你是说
模式:“简单”

:String
选择模式。有效值为:

  • 单一-一次仅允许选择一个项目。使用allowDeselect允许取消选择该项。这是默认设置
  • 简单-允许逐个简单选择多个项目。网格中的每次单击都将选择或取消选择一个项目
  • 多-允许使用Ctrl和Shift键复杂选择多个项目
试一试:


应该在3+时工作。我不认为这种配置是新的。

你是说
模式:“简单”

:String
选择模式。有效值为:

  • 单一-一次仅允许选择一个项目。使用allowDeselect允许取消选择该项。这是默认设置
  • 简单-允许逐个简单选择多个项目。网格中的每次单击都将选择或取消选择一个项目
  • 多-允许使用Ctrl和Shift键复杂选择多个项目
试一试:


应该在3+时工作。我不认为这种配置是新的。

在ExtJS4中,如果需要选择shift键,则覆盖“onRowSelection”;方法并修改ExtJS 4中多个选择的条件“if(mode!=“SINGLE”&&mode!=“MULTI”)”

,如果需要shift键选择,则覆盖“onRowSelection”;方法并修改多个选择的条件“如果(模式!=='SINGLE'&&mode!=='MULTI')”

尝试以下操作:

// Allow deselecting the only selected record in MULTI mode with a simple click.
// Note that this will only happen when allowdeselect is true
Ext.override( Ext.selection.Model, {
    selectWithEvent: function(record, e, keepExisting) {
        var me = this;

        switch (me.selectionMode) {
            case 'MULTI':
                if (e.ctrlKey && me.isSelected(record)) {
                    me.doDeselect(record, false);
                } else if (e.shiftKey && me.lastFocused) {
                    me.selectRange(me.lastFocused, record, e.ctrlKey);
                } else if (e.ctrlKey) {
                    me.doSelect(record, true, false);
                // Mod Start
                } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() == 1 && me.allowDeselect) {
                    me.doDeselect(record, false);                    
                // Mod End                        
                } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() > 1) {
                    me.doSelect(record, keepExisting, false);
                } else {
                    me.doSelect(record, false);
                }
                break;
            case 'SIMPLE':
                if (me.isSelected(record)) {
                    me.doDeselect(record);
                } else {
                    me.doSelect(record, true);
                }
                break;
            case 'SINGLE':
                // if allowDeselect is on and this record isSelected, deselect it
                if (me.allowDeselect && me.isSelected(record)) {
                    me.doDeselect(record);
                // select the record and do NOT maintain existing selections
                } else {
                    me.doSelect(record, false);
                }
                break;
        }
    },
});
试试这个:

// Allow deselecting the only selected record in MULTI mode with a simple click.
// Note that this will only happen when allowdeselect is true
Ext.override( Ext.selection.Model, {
    selectWithEvent: function(record, e, keepExisting) {
        var me = this;

        switch (me.selectionMode) {
            case 'MULTI':
                if (e.ctrlKey && me.isSelected(record)) {
                    me.doDeselect(record, false);
                } else if (e.shiftKey && me.lastFocused) {
                    me.selectRange(me.lastFocused, record, e.ctrlKey);
                } else if (e.ctrlKey) {
                    me.doSelect(record, true, false);
                // Mod Start
                } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() == 1 && me.allowDeselect) {
                    me.doDeselect(record, false);                    
                // Mod End                        
                } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() > 1) {
                    me.doSelect(record, keepExisting, false);
                } else {
                    me.doSelect(record, false);
                }
                break;
            case 'SIMPLE':
                if (me.isSelected(record)) {
                    me.doDeselect(record);
                } else {
                    me.doSelect(record, true);
                }
                break;
            case 'SINGLE':
                // if allowDeselect is on and this record isSelected, deselect it
                if (me.allowDeselect && me.isSelected(record)) {
                    me.doDeselect(record);
                // select the record and do NOT maintain existing selections
                } else {
                    me.doSelect(record, false);
                }
                break;
        }
    },
});