2012-09-27 13 views
8

Stworzyłem sklep używając ExtJs i chcę załadować wartość sklepu do ComboBox. Ale przed załadowaniem wartości muszę filtrować niektóre dane w oparciu o wartość wybraną w innym comboBox.jak korzystać z filtra w sklepie ExtJs?

W tym celu, myślę, że muszę zastosować filtr w sklepie, proszę wszelkie ciało może mi pomóc, jak mogę to zrobić.

Model: -

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

Store: -

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'} 
    ]}); 

Teraz używam tego CityStore załadować w ComboBox. ale przed załadowaniem chcę, jeśli stateId jest 1 wtedy tylko 3 zapisy (Bangalore, Mysore, Dharwad) są ładowane w combobox i jeśli stateId to 2 to inne 3 rekordy są ładowane w combobox. Jak mogę to osiągnąć.

+0

Możesz to sprawdzić: Ma dobry mały samouczek i działającą próbkę na JSFiddle. http://atechiediary.blogspot.com/2013/06/extjs-how-to-filter-data-of-store-in.html – DarkKnightFan

Odpowiedz

18

Według dokumentacji Ext.data.Store filter metoda:

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

Aktualizacja

Znalazłem że filtry ComboBox danych przez siebie i nie ma możliwości, aby zmienić to zachowanie. Ale widzę dwa rozwiązania tego problemu:

  1. filtrowanie danych ręcznie (patrz: Ext.util.MixedCollection filter) i załadować je do swojego sklepu (patrz Ext.data.Store load)

  2. Wyłącz dystrybucję sklepu clearFilter i filter metod i korzystanie z własnych 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); 
        } 
    }); 
    

    Następnie użyj metody cityFilter().

+0

, ale to nie działa. – Popeye

+0

jakiej wersji ExtJs używasz? –

+0

Używam Ext JS 4.0.7 – Popeye