ExtJS 4.2 可编辑组合异常行为

ExtJS 4.2 editable combo strange behaviour

我有一个 editable combo 这样的:

xtype : 'combo',
value : '',
queryMode : 'local',
displayField : 'label',
valueField : 'value',
store : someStore,
allowBlank : false,
disabled : true,
typeAhead : true,
listeners : {
    beforequery : function(record) {
        record.query = new RegExp(record.query, 'i');
        record.forceAll = true;
    }
}

这个组合是表格的一部分,奇怪的行为是这样的:

  1. 如果我输入一些文本,组合会完美地过滤结果,我可以 select 输入过滤后的任何结果。当我按下按钮提交表单时,在控制器中的某个时刻,我使用 combo.findRecord 获取组合中 selected 项目的额外数据,处理该额外数据并提交表单没问题。
  2. 与第一个情况相同,我输入了一些文本、组合过滤器和我 select 一个选项,但是如果我 select 一个 part/all 文本(单击并移动 mouse/double click mouse on text) 然后按组合键 ctrl+c(复制),然后按提交按钮,combo.findRecord returns false,case 1 和 2 的唯一区别是我复制(未剪切)selected 项目的部分文本。

知道为什么会这样吗?我用谷歌搜索了它,但没有找到任何线索。

您可以尝试将 forceSelection 配置添加到组合并分享您的结果。

此致, 桑迪普

问题出在 new RegExp(record.query, 'i'),因为当您对可编辑的组合执行 ctrl+c 时,它会在查询之前通过侦听器,有时,组合的值包含使用的字符在 ()..

等正则表达式配置中

所以解决方案是对字符串进行转义以进行搜索:

var string= record.query;
string = string.replace(/[.*+?^${}()|[\]\]/g, '\$&');//This line scapes all special characters
record.query = new RegExp(string,'gi')
record.forceAll = true;