我有一个ExtJS商店作为代码列表,包含属性标签和值的记录。此外,我有一个网格列,其列渲染器使用商店的方法 findRecord(field,value)查找商店中的值,然后显示相应的标签:< / p>
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,&#39;标签A&#39;)和(99,&#39;标签B&#39;),网格将显示&#39;标签B&#39;原始值为9.
我的第一个猜测是,这个值是通过令牌查找的,并且只要在记录的值中找到搜索令牌就会返回标签,无论它是否完全匹配(即,前9个) 99将满足搜索过程,以便它返回相应的记录)。但是,同一商店被分配给组合框,组合框显示相同值的正确标签。
这种行为令我感到困惑,我想知道为什么列渲染器在组合框没有找到时无法查找正确的标签。我想解决这个问题的更多内容,但不知道可能导致问题的原因。关于Ext.Store我有什么遗漏可以解释这种奇怪的行为吗?
答案 0 :(得分:0)
不确定您使用的是哪个版本的ExtJS,但findRecord
的第六个参数是exactMatch
,因为至少是ExtJS 4.2。如果将该参数设置为true,则应该可以正常工作。
var rec = cl.findRecord("value", value, undefined, undefined, undefined, true);