【问题标题】:ExtJs combo filtering doesn't work properlyExtJs 组合过滤无法正常工作
【发布时间】:2014-08-14 15:16:16
【问题描述】:

我尝试使用 2 个 ExtJs 组合。

当用户更改第一个(更改事件)时,我更改第二个的存储。 (非常类似于国家/地区过滤。当用户选择国家/地区时,我将国家加载到第二个组合商店)。

到这里为止,一切正常。

当我将 beforequery 事件侦听器添加到第二个组合时出现问题:

beforequery: function(record) {
    record.query = new RegExp(record.query, 'i');
    record.forceAll = true;
}

我这样做是为了让用户能够更方便地搜索组合(也可以从单词的中间开始,而不仅仅是从开头)。

它确实有效,

但是当我使用这个 beforequery 监听器时,我在组合存储中所做的更改并不总是出现在组合中。显然,只有当我将记录添加到商店时,它才会显示在组合中,但是当我删除记录时,id 不会删除它们。

有人知道为什么会这样吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript extjs combobox


    【解决方案1】:

    以'before-'开头的事件的事件函数应该返回true继续,返回false取消事件。

    beforequery: function(record) {
        record.query = new RegExp(record.query, 'i');
        record.forceAll = true;
        return true;
    }
    

    【讨论】:

      【解决方案2】:

      ExtJs 的 Store.removeAll() 函数似乎有 bug。

      (他们清除了所有记录,但忘记将它们从商店的快照中删除)。

      我必须删除对组合的底层 store.removeAll() 的所有调用到 while() 一个一个地删除项目。

      然后它就可以正常工作了。

      【讨论】:

        【解决方案3】:

        这也应该适用于较新版本的 extjs (>=5):

        var allRecords = store.getData().getSource() || store.getData();
        allRecords.removeAll();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-12
          • 1970-01-01
          • 2015-07-19
          • 2013-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多