代码之家  ›  专栏  ›  技术社区  ›  Andrew Vershinin

ExtJS 4:动态存储过滤

  •  1
  • Andrew Vershinin  · 技术社区  · 7 年前

    我在中指定了一个过滤器 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操作以及加载后)?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Andrew Vershinin    7 年前

    为了实现这一点,需要在添加和更新事件时将侦听器添加到存储:

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