Ext.Store返回错误的记录

时间:2017-06-14 09:04:47

标签: javascript extjs

我有一个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我有什么遗漏可以解释这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:0)

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

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