Javascript 多选&;取消选择边界列表
我必须为表单创建一个自定义边界列表,当它有单选择和不取消选择时,它可以正常工作。如何告诉boundlist执行取消选择和多重选择 不起作用: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中)
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;
}
},
});