2012-09-27 25 views
8

Creé una tienda usando ExtJs y quiero cargar el valor de la tienda en ComboBox. Pero antes de cargar valores, necesito filtrar algunos datos basados ​​en el valor seleccionado en otro comboBox.cómo usar el filtro en la tienda ExtJs?

Así que para ese propósito, creo que necesito aplicar filtro en la tienda, cualquier cuerpo puede ayudarme a hacer eso.

Modelo: -

Ext.define('City', { 
extend: 'Ext.data.Model', 
fields: [ 
     { name: 'StateId', type: 'string' }, 
     { name: 'City', type: 'string' }, 
]}); 

de la tienda: -

var cityStore = Ext.create('Ext.data.Store', { 
model: 'City', 
data : [ 
    { StateId: '1', City: 'Bangalore'}, 
    { StateId: '1', City: 'Mysore'}, 
    { StateId: '1', City: 'Dharwad'}, 
    { StateId: '2', City: 'Mumbai'}, 
    { StateId: '2', City: 'Pune'}, 
    { StateId: '2', City: 'Nagpur'} 
    ]}); 

Ahora estoy usando este Citystore para cargar en el cuadro combinado. pero antes de la carga quiero si stateId es 1 entonces solo 3 registros (Bangalore, Mysore, Dharwad) se cargan en el cuadro combinado y si stateId es 2, entonces otros 3 registros se cargan en el cuadro combinado. Cómo puedo lograrlo

+0

Puede comprobar esto: tiene un buen pequeño tutorial junto con una muestra de trabajo en JSFiddle. http://atechiediary.blogspot.com/2013/06/extjs-how-to-filter-data-of-store-in.html – DarkKnightFan

Respuesta

18

Según la documentación Ext.data.Store filter método:

var stateId = 1; // your value 
cityStore.clearFilter(true); 
cityStore.filter('StateId', stateId); 

actualización

he encontrado que ComboBox filtros de datos por sí mismo y no hay oportunidad de cambiar su comportamiento. Pero veo dos soluciones de este problema:

  1. Filtrar datos manualmente (ver Ext.util.MixedCollection filter) y cargarlo en su tienda (ver Ext.data.Store load)

  2. de tiendas Desactivar clearFilter y filter métodos y usar el propio cityFilter:

    Ext.define('CityStore', { 
        extend: 'Ext.data.Store', 
        filter: Ext.emptyFn, 
        clearFilter: Ext.emptyFn, 
        cityFilter: function (stateId) { 
         Ext.data.Store.prototype.clearFilter.call(this); 
         Ext.data.Store.prototype.filter.call(this, 'StateId', stateId); 
        } 
    }); 
    

    Luego, utilice el método cityFilter().

+0

pero no está funcionando. – Popeye

+0

¿qué versión de ExtJs usas? –

+0

Estoy usando Ext JS 4.0.7 – Popeye

Cuestiones relacionadas