ExtJS 4:动态存储过滤

ExtJS 4: Dynamic store filtering

我在商店的 filters 配置中指定了一个过滤器:

Ext.define('Record', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'value',
        type: 'number'
    }]
});

Ext.create('Ext.data.Store', {
    id: 'store',
    model: 'Record',

    filters: [
        function(item) {
            return item.get('value') > 2;
        }  
    ],

    sorters: [{
        property: 'value',
        direction: 'DESC'
    }],

    data: [{
        value: 2,
    }, {
        value: 1
    }, {
        value: 3
    }]
});

Ext.create('Ext.view.View', {
    store: Ext.data.StoreManager.lookup('store'),
    tpl: new Ext.XTemplate(
        '<tpl foreach=".">',
            '<div class="record">{value}</div>',
        '</tpl>'
    ),
    itemSelector: '.record',
    emptyText: 'No records',
    renderTo: Ext.getBody()
});

仅当我在商店中明确调用 filter() 时才适用。 filterOnLoad 未设置,默认为 true,因此必须过滤商店。如何保持商店始终过滤(无论何时执行任何 CRU 操作以及加载后)?

要完成此操作,需要在添加和更新事件时向商店添加侦听器:

listeners: {
    add: function(store) {
        store.filter();
    },

    update: function(store) {
        store.filter();
    }
},