如何在商店过滤器功能中获取 viewModel 对象?

And*_*rei 2 filtering extjs store

我定义了商店和过滤器。ViewModel 包含test我需要通过此对象过滤商店项目的对象。

Ext.define('XXX.view.XXX.ViewXXXXModel', {
    extend: 'Ext.app.ViewModel',
Run Code Online (Sandbox Code Playgroud)

...

    stores: {
        agreements: {
            source: 'XXX',
            filters: {
                filterFn: function(item) {
                    return item.some_field !== this.get('test').somevalue;
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我无法从过滤器功能访问视图模型的测试对象?

Mat*_*ood 5

现在太晚了,但我刚刚遇到了同样的问题,更简洁的方法是将 filterFn 作为公式绑定返回:

对于您的原始示例:

stores: {
    agreements: {
        source: 'XXX',
        filters: [{
            filterFn: '{storeFilter}'
            }]
        }
    }
},
formulas: {
   storeFilter: function(get) {
        var somevalue = get('test').somevalue;
        return function(item) {
            return item.some_field !== this.get('test').somevalue;                
        };
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:当我最初写这篇文章时,我不知道 Ext 在使用 setFilters 时会不断添加额外的过滤器,而不是将它们全部替换。要解决此问题,您需要使用 id 命名过滤器。在上面的例子中是这样的:

        filters: [{
            id: 'myVMFilterFunction',
            filterFn: '{storeFilter}'
            }]
Run Code Online (Sandbox Code Playgroud)

然后它按预期替换过滤器