2012-10-18 12 views
5

Mi sento frustrato perché il mio negozio continua a essere filtrato ogni volta che lo uso per supportare un combofield. C'è un modo in cui posso disabilitare questo?Extjs4 Combo e Stores: rimuove il filtro quando queryMode = local?

Lo scenario

ho un negozio con un campo data su di esso; una serie di oggetti caricati quando il negozio viene istanziato. Io uso questo negozio per guidare una serie di combo in diverse aree della mia app. Sfortunatamente, le mie combo stanno applicando i filtri sullo store, causando altre combo che utilizzano lo stesso negozio per visualizzare solo i valori filtrati in seguito, non l'intero elenco.

Soluzioni alternative

mia soluzione goofy è chiamare combo.getStore().clearFilter() dopo ho finito con il combo, ma che sta per ottenere vecchio molto veloce, e probabilmente introdurre un bug da qualche parte, ne sono sicuro.

Se rimuovo queryMode:'local' dalla configurazione del mio combo, va tutto bene, tranne che ora la comoda funzionalità di digitazione non funziona più; Ho appena mostrato un elenco di elementi in un menu a discesa che non riesco nemmeno a navigare tra le lettere di digitazione degli articoli corrispondenti. È peggio di un normale tag html select!

Qualche idea?

Grazie!

risposta

2

Non è possibile farlo poiché il filtro viene applicato non su combo ma su store. Potresti provare a creare più istanze dello stesso store e lavorare con quello. Anche se non so se funzionerà.

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

Sarà funziona se si effettua il non modificabile combo dal momento che nessun filtro può essere applicato allora. Ma, come dici tu, hai bisogno della funzione type ahead, dovrai creare più istanze di store.

1

Alla luce del fatto che le combo aggiungeranno filtri nel backing store, quindi influenzando tutte le combinazioni che utilizzano il negozio all'interno della mia applicazione, ho optato per aggiungere un override alla classe combo in modo che cancelli il filtro il negozio quando la casella combinata viene distrutta.

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

E 'un po' di un hack, ma io consentono per la via di fuga di indicare di non cancellare i filtri, anche.

0

Il modo più semplice che ho trovato per gestire questa soluzione è quella di aggiungere il seguente ascoltatore alla combinata:

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

di default queryPlan.query è il testo attualmente nel campo combo che viene utilizzato per il filtraggio. L'impostazione su false annulla la query, ma impostandola su true consente alla query di passare senza un valore di filtro, mantenendo quindi tutti i valori nell'elenco a discesa per tutti i campi combinati.

0

Ho avuto problemi simili con ExtJS 4.2 e combo. Il negozio continuava a essere filtrato ma non potevo usare clearFilter() perché dopo quella combinazione era inutilizzabile. La mia soluzione, che ha funzionato, è questo listener su combo:

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