2012-10-18 16 views
5

Sinir bozucu oluyorum çünkü bir combofield'ı kullanmak için kullandığım zaman mağazam filtrelenmeye devam ediyor. Bunu devre dışı bırakmamın bir yolu var mı?Extjs4 Combo's and Stores: queryMode = local olduğunda filtreyi kaldırın.

Senaryo

Bunun üzerine bir data alanına sahip bir Store'u var; Mağaza başlatıldığında yüklenen nesneler dizisi. Uygulamamın farklı alanlarında bir grup combo kullanmak için bu mağazayı kullanıyorum. Ne yazık ki, taraklarım mağazada filtreler uyguluyor ve aynı mağazayı kullanan diğer kombinasyonların tüm listeye değil, yalnızca filtrelenmiş değerleri göstermesine neden oluyor.

Geçici Çözümler

Benim aptal geçici çözüm ben açılan işim bittikten sonra combo.getStore().clearFilter() aramak, ama bu eski çok hızlı olsun ve muhtemelen bir yerlerde bir hata tanıtmak için gidiyor, eminim.

combo'nun yapılandırmasından queryMode:'local''u kaldırırsam, her şey yolundadır, şu anda kullanışlı olan ileri özellik özelliği artık çalışmaz; Bir açılır listeden, eşleştirilen öğelerin yazım harflerinin etrafında gezinemediğim öğelerin bir listesini gösterdim. Bu normal bir html select etiketinden daha kötü!

Herhangi bir fikrin var mı?

Teşekkürler!

cevap

2

Filtreleme, combo'da değil, store'da uygulandığından bunu yapamazsınız. Aynı store'un birden çok örneğini oluşturmayı deneyebilir ve bununla çalışabilirsiniz. Yine de işe yarayıp yaramadığını bilmiyorum.

Ext.create('combo', { 
     //other config 
     store : Ext.create('my.store') 
}); 

filtreleme yok sonra uygulanabilir yana combo düzenlenebilir olmayan kurarsın çalışacağız. Ancak, dediğiniz gibi, ileriye dönük özelliğe ihtiyacınız varsa, store'un birden çok örneğini oluşturmanız gerekir.

1

Arka panelde tarakların filtreler ekleyeceği gerçeğinden hareketle, bu nedenle uygulamayı kullanarak mağazayı kullanan tüm kombinasyonları etkilemekteyim, açılan sınıfa bir geçersiz kılmayı seçtim, böylece filtreyi temizler açılan kutu yok olduğunda mağaza.

Ext.define('MAP.override.Combo', { 
    override : 'Ext.form.field.ComboBox', 
    initComponent : function() 
    { 
     this.callParent(arguments); 

     this.on('beforedestroy',function(combo){ 
      if(combo.leaveFilter === true) return; 

      console.log('clearing filter on store'); 
      combo.getStore().clearFilter(); 
     }); 
    } 
}); 

bir kesmek biraz, ama ben de filtreleri temizlemek için uymadığını gösteren kaçış kapağından için izin veriyoruz.

0

Bu çözümü işlemek için bulduk basit yolu açılan aşağıdaki dinleyici eklemektir: Varsayılan queryPlan.query tarafından

listeners: { 
    beforequery: function(queryPlan){ 
     queryPlan.query = true; 
    } 
} 

filtreleme için kullanılır açılan alanda şu anda metindir. Yanlış olarak ayarlamak sorguyu iptal eder, ancak bunu true olarak ayarlamak, sorgunun bir filtre değeri olmadan geçmesine izin verir, bu nedenle tüm açılan alanlar için tüm değerleri aşağıya açılan listede tutar.

0

ExtJS 4.2 ve combo ile benzer bir sorun yaşadım. Mağaza filtrelenmeye devam ediyordu ancak clearFilter() yöntemini kullanamamıştım çünkü bu combo kullanıldıktan sonra kullanılamadı. Benim çözümüm, bu dinleyici, bu dinleyicide birleşik:

listeners: { 
    blur: function(combo) { 
    if (combo.queryFilter) { 
     combo.queryFilter.setValue(''); 
     combo.getStore().filter(); 
    } 
    } 
}