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;
}
}
这个组合是表格的一部分,奇怪的行为是这样的:
- 如果我输入一些文本,组合会完美地过滤结果,我可以 select 输入过滤后的任何结果。当我按下按钮提交表单时,在控制器中的某个时刻,我使用
combo.findRecord
获取组合中 selected 项目的额外数据,处理该额外数据并提交表单没问题。
- 与第一个情况相同,我输入了一些文本、组合过滤器和我 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;
我有一个 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;
}
}
这个组合是表格的一部分,奇怪的行为是这样的:
- 如果我输入一些文本,组合会完美地过滤结果,我可以 select 输入过滤后的任何结果。当我按下按钮提交表单时,在控制器中的某个时刻,我使用
combo.findRecord
获取组合中 selected 项目的额外数据,处理该额外数据并提交表单没问题。 - 与第一个情况相同,我输入了一些文本、组合过滤器和我 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;