Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/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
Javascript 多选&;取消选择边界列表_Javascript_Extjs_Extjs4_Extjs4.2 - Fatal编程技术网

Javascript 多选&;取消选择边界列表

Javascript 多选&;取消选择边界列表,javascript,extjs,extjs4,extjs4.2,Javascript,Extjs,Extjs4,Extjs4.2,我必须为表单创建一个自定义边界列表,当它有单选择和不取消选择时,它可以正常工作。如何告诉boundlist执行取消选择和多重选择 不起作用: var mode = this.multiselect ? 'MULTI' : 'SINGLE'; var sm = bl.getSelectionModel(); // TODO sm.setSelectionMode(mode); sm.allowDeselect = this.deselect; 不工作(在扩展的FieldContainer中)

我必须为表单创建一个自定义边界列表,当它有单选择和不取消选择时,它可以正常工作。如何告诉boundlist执行取消选择和多重选择

不起作用:

var mode = this.multiselect ? 'MULTI' : 'SINGLE';
var sm = bl.getSelectionModel();  // TODO 
sm.setSelectionMode(mode);
sm.allowDeselect = this.deselect;
不工作(在扩展的FieldContainer中):


不确定你想要达到什么样的行为。默认情况下,多模式允许取消选择,allowDeselect配置选项在此情况下不适用。以下是Ext.selection.Model文档中的引用:

allowDeselect:布尔值


允许用户取消选择数据视图、列表或网格中的记录仅在模式为“单一”时适用。

如果我理解正确,您希望能够通过在“多选”中单击来取消选择唯一选定的记录

请尝试以下代码:

// 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;
        }
    },
});

是的,我知道,我设置了两个属性
true
,但是取消选择和/或multiselect不起作用:((ExtJS 4.2)(或者取消选择可以为true,而multi为false…)这是历史记录:我使用字段容器和绑定列表设置了一个。使用multiselect可以很好地工作(就像你文章中的第二个选项)。它也适用于multiSelect=false和allowDeselect=true。因此,您的第二个选项看起来不错,只是“取消选择”配置应该是“allowDeselect”。如果您发布完整的容器定义,我们可能会理解这个问题。Thx尽管有帮助,它仍然有效。我在mvc中实现它只有一个困难,但我尝试了:)
// 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;
        }
    },
});