Ext.Store 返回错误的记录



我有一个 ExtJS 存储,它用作代码列表,包含带有属性标签的记录。此外,我有一个网格列,其列渲染器使用商店的方法findRecord(field,value)查找存储中的值,然后显示相应的标签:

renderer: function(value, metaData, record, rowIndex, colIndex, store, view){
var columnName = view.panel.columns[colIndex].name;
var display = value;
if(columnName){
var clString = "cl_t_cl_" + columnName; 
var cl = Ext.getStore(clString);
if(cl){
var rec = cl.findRecord("value", value);
display = rec ? rec.get("label") : value;
}
} else if(record.get("label") !== undefined) {
display = record.get("label");
}
return display;
}

但是,在某些情况下,网格中会显示错误的标签。例如,如果我有两条记录(9,"标签 A")和(99,"标签 B"),则网格将显示原始值为 9 的"标签 B"。

我的第一个猜测是,该值是逐个令牌查找的,并且一旦在记录的值中找到搜索令牌,标签就会返回,无论它是否完全匹配(即,99 个中的前 9 个将满足搜索过程,以便返回相应的记录)。但是,同一存储将分配给一个组合框,该组合框显示相同值的正确标签。

这种行为让我感到困惑,我想知道为什么列渲染器无法查找正确的标签,而组合框却没有。我想解决这个问题,但不知道可能导致问题的原因。我缺少什么 Ext.Store 可以解释这种奇怪的行为吗?

不确定您使用哪个版本的 ExtJS,但要findRecord的第六个参数至少从 ExtJS 4.2 开始exactMatch。如果将该参数设置为 true,则它应该可以工作。

var rec = cl.findRecord("value", value, undefined, undefined, undefined, true);