2011-11-03 20 views
6

Bir grid sütunu filtrelemek için:Birden fazla extjs ızgara sütunları nasıl filtrelenir?

{ 
    xtype: 'button', 
    text:'Search', 
    handler:function(){ 

     store.clearFilter(); 
     var searchValue = Ext.getCmp("textFieldId").getValue(); 
     store.load().filter('GridFieldName', searchValue); 

    }     
} 

fakat aynı anda birden fazla alanı nasıl arayacağımızı, örneğin:

{ 
    xtype: 'button', 
    text:'Search', 
    handler:function(){ 

     store.clearFilter(); 
     var searchValue = Ext.getCmp("textFieldId").getValue(); 
     store.filter([ 
      {property: "GridFieldName", value: searchValue}, 
      {property: "GridFieldName1", value: searchValue} 
     ]); 
    }     

} 

herhangi bir fikir?

Tuhaf olan her iki durumda da, sadece tek arama çalışır:

Bu çalışır:

store.filter([ 
     { property: "FirstName", value: searchValue } 
]); 

ve bu çalışır:

var FirstNameFilter = new Ext.util.Filter({ 
    property: "FirstName", value: searchValue 
}); 

store.filter(FirstNameFilter); 

ancak bu yapmaz:

store.filter([ 
     { property: "FirstName", value: searchValue }, 
     { property: "LastName", value: searchValue } 
]); 

veya bunu yapar:

 var filters = [ 
    new Ext.util.Filter({ 
      property: "FirstName", value: searchValue 
    }), 
    new Ext.util.Filter({ 
      property: "LastName", value: searchValue 
    }) 
]; 
store.filter(filters); 

cevap

8

deneyin böyle Ext.util.Filter örneklerini oluşturmak için:

var filters = [ 
new Ext.util.Filter({ 
    property: "GridFieldName", value: searchValue 
}), 
new Ext.util.Filter({ 
    property: "GridFieldName1", value: searchValue 
}) 
]; 
store.filter(filters); 

Alternatif olarak, özel mantığı ile tek bir filtre oluşturabilirsiniz:

var filters = [ 
    new Ext.util.Filter({ 
     filterFn: function(item){ 
     return item.get('GridFieldName') == searchValue && item.get('GridFieldName1') == searchValue; 
     } 
    }) 
]; 
store.filter(filters); 
+0

ben düzenlenmiş soru, herhangi bir fikir? –

+0

Sadece OP bunun işe yaramadığını değil, 3.2 (zorlandığım) ve Ext.util.Filter kullanmıyorum. Baska öneri? –

+0

merhaba Bu kod filtresi, her iki alanı da varsa hem de kontrol edin ve sonuçta –

2

. Değil mi? Anladığım kadarıyla, filtreleri göstermiş olduğunuz gibi uygularsanız, her iki kritere göre filtrelemelidir.

store.filter([ 
    {property: "GridFieldName", value: searchValue}, 
    {property: "GridFieldName1", value: searchValue} 
]); 

Alternatif olarak, yeni filtreler eklemek için setFilter işlevini kullanabilmeniz gerekir. Eğer argüman olmadan SetFilter kullanırsanız

store.setFilter("GridFieldName", searchValue) 
store.setFilter("GridFieldName1", searchValue) 

sadece daha önce belirlemiş olduğunuz filtreleri yeniden. Sadece clearFilter'i çağırırsanız kaldırılırlar.

+0

Hangisi filtrelenmiş, firstName veya LastName? – svenlol

+0

iyi, hiçbiri iki filtreyi koyarsanız, yalnızca biriyle çalışır, arama motoru için tüm jsonu filtrelemeye izin vermem gerekir, bu yüzden birden çok sütuna birden çok filtreye ihtiyacım var? –

8

Bu yazı bulundu filtre uygulamak için bir yol ararken OR mantığı ile birden çok sütun (aslında TÜM sütunlar).

... 
var regex = RegExp('Insert searchclause here', 'i'); 
store.filter(new Ext.util.Filter({ 
    filterFn: function (object) { 
     var match = false; 
     Ext.Object.each(object.data, function (property, value) { 
      match = match || regex.test(String(value)); 
     }); 
     return match; 
     } 
})); 

HTH

4
store.clearFilter(); 
    var searchValue = Ext.getCmp("textFieldId").getValue(); 
    if (!!searchValue) { 
     var filters = [ 
      new Ext.util.Filter({ 
       filterFn: function (item) { 
        return item.get('FirstName').toLowerCase().indexOf(searchValue.toLowerCase()) > -1         
         || item.get('LastName').toLowerCase().indexOf(searchValue.toLowerCase()) > -1; 
       } 
      }) 
     ]; 
     store.filter(filters); 
    } 

Bu Pavel itibaren uygulanır kodum: Ben gibi özel bir filterfunction ile filtreleme sona erdi (böylece arama-fıkra sütun A maçları YA kolon B vs. eşleşir).
Çok sütunlu, Büyük/küçük harfe duyarlı olmayan, arama işlevini by OR mantık.

Bu yardımın umarım.