ExtJS 6 在内存代理中使用自定义过滤功能

2024-01-25

我有一家商店配置了内存代理 http://docs.sencha.com/extjs/6.2.1/modern/Ext.data.proxy.Memory.html with enablePaging: true。商店的remoteFilter and remoteSort set to true因此对代理处理的请求进行过滤和排序。

当我按多个字段过滤商店时,我想使用 OR 条件,而不是 AND。

如果没有内存代理分页,我可以使用remoteFilter: false和自定义过滤器功能,例如:

store.filterBy(function (record)
{
    for (var i = 0; i < searchFields.length; ++i) {
        if (record.get(searchFields[i]).toLowerCase().indexOf(searchText) !== -1) {
            return true;
        }
    }
    return false;
});

但是如何通过启用分页来实现这一点呢?覆盖内存代理?


Ext.data.proxy.Memory.read http://docs.sencha.com/extjs/6.2.1/classic/src/Memory.js.html#Ext.data.proxy.Memory-method-read use Ext.util.Filter.createFilterFn http://docs.sencha.com/extjs/6.2.1/classic/src/Filter.js.html#Ext.util.Filter-static-method-createFilterFn基于传递的 Ext.util.Filter[] 创建过滤器函数(带有属性值配置):

// Filter the resulting array of records 
if (filters && filters.length) {
    // Total will be updated by setting records 
    resultSet.setRecords(records = Ext.Array.filter(records, Ext.util.Filter.createFilterFn(filters)));
    resultSet.setTotal(records.length);
}

因此,如果您想使用不同的过滤器逻辑,您可以重写内存代理读取方法并使用自定义函数来创建过滤器函数:

Ext.define('MyApp.extensions.FilterMemoryProxy', {
    extend: 'Ext.data.proxy.Memory',
    alias: 'proxy.filtermemory',

    createCustomFilterFn: function (filters)
    {
        if (!filters) {
            return Ext.returnTrue;
        }
        return function (candidate)
        {
            var items = filters.isCollection ? filters.items : filters,
                length = items.length,
                i, filter;
            for (i = 0; i < length; i++) {
                filter = items[i];
                if (!filter.getDisabled() && candidate.get(filter.getProperty()).toLowerCase().indexOf(
                        filter.getValue().toLowerCase()) !== -1) {
                    return true;
                }
            }
            return false;
        };
    },

    read: function (operation)
    {

        ...

        if (operation.process(resultSet, null, null, false) !== false) {
            // Filter the resulting array of records
            if (filters && filters.length) {
                // Total will be updated by setting records
                resultSet.setRecords(records = Ext.Array.filter(records, me.createCustomFilterFn(filters)));
                resultSet.setTotal(records.length);
            }

        ...

        }
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExtJS 6 在内存代理中使用自定义过滤功能 的相关文章

  • Extjs XTemplate 两个同级数组循环?

    我想将 XTempate 与以下 json 数据一起使用 在另一个数组中循环一个数组 var data name xxx rowTitleArr 1 2 3 colTitleArr a b c var tpl name
  • 如何禁用 Ext JS 按钮

    我有一个 id 为的按钮btnAdd我想在某些事件触发时禁用它 当某些窗口关闭时该事件发生 所以我尝试了下面的代码 但它不起作用 Ext create Ext window Window Some initialization code g
  • 如何过滤多个extjs网格列?

    要过滤一个网格列 我们可以使用 xtype button text Search handler function store clearFilter var searchValue Ext getCmp textFieldId getVa
  • 动态传递参数

    我正在尝试使用 ExtJS 4 将图像从数据库检索到数据视图 现在我需要动态传递参数 主要是这里 Ext define pkgName v02x003001 SV02X00300102 extend Ext view View alias
  • ExtJS 4:单击按钮后替换视口项目数组中的两个组件

    下面是一些单击按钮后即可运行的代码 当我在另一个按钮中再次设置 视图 变量 对于不同的按钮 并使用不同的网格和不同的表单运行这个确切的代码时 这两个项目完全消失 为什么它在第一次迭代时运行 但在第二次迭代时不运行 更重要的是 我怎样才能正确
  • 如何滚动到网格中的指定记录

    我们如何滚动到网格中定义的记录 记录或索引 使用缓冲渲染器 通过调用以下命令非常容易 grid view bufferedRenderer scrollTo 0 false callback scope 但是如何使用默认渲染器来完成此操作呢
  • 在 ExtJS 网格中编辑整行后触发“afteredit”?

    我有一个 ExtJS 编辑器网格 里面有一些列 我想修改记录上的数据并将数据自动保存到数据库 但我只需要在完成编辑当前行的所有单元格后保存数据 我使用了 afteredit 事件 但它在一个单元格更改后立即触发了该事件 在完成所有单元格的修
  • 使用分页 extjs 在组合框中搜索

    您好 我正在尝试在组合框中进行搜索 它正在工作 但仅在当前页面中搜索我也使用分页搜索 我需要在所有页面中搜索而不仅仅是当前页面 任何建议 xtype combo fieldLabel Organization Id name company
  • Ext.data.Store getTotalCount() 加载后不计算

    我的商店在调用时并不总是返回正确数量的记录getTotalCount 这个问题出现在我之后load 商店 我知道在检查时商店里有记录 我正在使用 ExtJs 4 1 3 this grid reference to my grid var
  • Xtemplate if sencha touch 中的条件

    我有以下 Xtemplate 代码 Ext XTemplate div class moreArrow div div class img img src http localhost WL2 assets rest image div d
  • 如何在 TreePanel 上拖放后触发事件

    如何使用 Ext tree ViewDDPlugin 的事件 我有一个使用 DDPplugin 的 TreePanel 但我想知道如何监听 drop 事件 这就是我的代码的样子 var monPretree Ext create Ext t
  • Extjs组合框:隐藏下拉列表中的选定值

    我正在使用 ExtJS 4 并寻找一种可以从组合的下拉列表中隐藏当前选定值的方法 因此 代替这个 当前在组合框中选择 阿拉斯加 我希望值列表如下所示 就我而言 组合框是不可编辑 即您不能输入任意值 我认为两次显示所选值没有多大意义 一次在输
  • ExtJS TreeGrid 中的复选框列

    有没有办法在新的 extjs 小部件 TreeGrid 中包含复选框列 将节点属性标记为 false true 并不像 TreePanel 那样有效 Cheers 我修改了 Ext ux tree TreeGridNodeUI 类来实现此功
  • 比较 YUI 和 Ext JS [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • EXTJS 中选项卡面板的单击侦听器

    我在 extjs 中使用选项卡面板 我想在单击选项卡时显示警报 但我不知道如何 这就是我现在所做的 xtype tabpanel activeTab 0 region center items xtype panel title All i
  • 删除在网格 ExtJS 4 中选择特定行的功能

    我必须删除在网格中选择某些行的功能 我使用复选框模型 selModel Ext create Ext selection CheckboxModel mode SIMPLE 要禁用选择 我使用 beforeselect 事件 befores
  • Extjs中始终显示Slider的提示文本

    在 Extjs 4 1 1a 中 如何保持tip text滑块始终可见 目前 tip text每当用户拖动滑块栏时就可见 我搜索了docs http docs sencha com ext js 4 0 api Ext slider Sin
  • 在 Ext JS 构造函数中将项目推入数组会产生多个项目

    我有一个我定义的 Ext JS 类 在这个班级的constructor 我将一个文本字段推送到我的项目数组上 然后添加到我的测试字符串中 数组和字符串在类定义中都声明为空 但是 如果您尝试创建多个类实例 您将看到项目数组在每个实例之间共享
  • 如何使用 JSON 结果更新 Extjs 进度条?

    我在让进度条从 Json 结果中检索进度并根据每 10 秒的计时器检查更新进度条时遇到一些困难 我可以创建这样的 json 结果 success true progress 0 2 我想总体思路是 我需要一个间隔设置为 10 秒的任务 并让
  • Extjs - 为选项卡生成唯一的 url

    据我了解 ExtJS 使用 AJAX 进行所有服务器端通信 并且理想情况下每个应用程序只有一页 但我正在探索为 ExtJS 选项卡生成唯一 URL 的可能性 然后用户可以从地址栏复制该 URL 以供以后使用 传统 Web 应用程序方法 使页

随机推荐