ExtJS过滤器功能在一个组合框上工作而不是另一个组合框?

时间:2016-06-16 19:52:05

标签: extjs combobox null extjs6-classic

我正在开发一个项目,要求我在用户输入时过滤组合框。我设置它,以便我有一个辅助函数,它应该是一个通用的组合框函数:

filterComboGeneral: function(combo, filterfield)
{
    // try
    // {
        console.log(combo.getXType());
        var passpatt = '^' + combo.getValue().toLowerCase();

        if (combo.store.isFiltered())
        {
            combo.store.clearFilter();
        }

        combo.store.filterBy(function(record) {


            var pattern = new RegExp(passpatt);
            var teststr = record.get(filterfield).toLowerCase();

            var retval = pattern.test(teststr);


            return retval;
        });
    // }
    // catch (e) {
    //     console.log("null was encountered in text box.  Moving on");
    // }
}

请忽略已注释的try-catch,我对它们进行了评论,以检查实际抛出的异常。

然后我有一个特定的函数来调用这个通用函数:

filterMainCombo: function(combo, release)
{
    this.filterComboGeneral(combo, "name");
}
然后我有两个组合框。第一个在视图文件中定义:

{
      xtype: 'combobox',
      itemId: 'scriptfilt',
      store: {
          type: 'scriptstore'
      },
      valueField: 'id',
      displayField: 'name',
      typeAhead: true,
      autoSelect: true,
      minChars: 1,
      typeAheadDelay: 0,
      enableKeyEvents: true,
      listeners: {
          keyUp: 'filterMainCombo'
      }
  }

这个组合框非常合适。

然后我有另一个在我的控制器文件中声明为变量的那个(这与我的过滤器函数所在的文件相同):

var scriptcb = Ext.create('Ext.form.ComboBox', {
        fieldLabel: 'Script',
        store: scrstore,
        displayField: 'name',
        valueField: 'id',
        forceSelection: true,
        itemId: 'scriptcombo',
        typeAhead: true,
        autoSelect: true,
        minChars: 1,
        typeAheadDelay: 0,
        enableKeyEvents: true,
        listeners: {
            keyUp: 'filterMainCombo'
        }
    });

然后将该组合框添加到显示的窗口中。但出于某种原因,每当我在这里描述的第二个框中输入实际值时,会触发keyUp事件,但该值为null并且不确定原因。

0 个答案:

没有答案