2017-10-04 9 views
1

j'ai un filtre spécifié dans filters configuration du magasin:ExtJS 4: magasin dynamique filtration

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() 
}); 

Il est uniquement appliquée si j'appelle explicitement filter() sur le magasin. Le filterOnLoad n'est pas défini et est par défaut true, donc le magasin doit être filtré. Comment puis-je garder le magasin toujours filtré (chaque fois qu'une action CRU est effectuée et après le chargement)?

Répondre

1

Pour ce faire, il est nécessaire d'ajouter des écouteurs au magasin sur l'ajout et la mise à jour des événements:

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

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

Encaisser votre réponse. –

+1

@AkinOkegbile Je ne peux pas jusqu'à demain. –