Comment envoyer des paramètres supplémentaires lors du chargement d'un magasin à un combobox dans ExtJS 4?

Comment puis-je envoyer des paramètres supplémentaires lors de l'utilisation d'un magasin pour une zone de liste déroulante dans ExtJS 4?

Je sais que je peux utiliser "extraParams" dans les paramètres de proxy, mais qui va affecter TOUS les éléments qui utilise le même magasin.

I. e si j'ai une Grille à l'aide d'un magasin appelé "Utilisateurs" qui liste tous les utilisateurs dans un système. Dans le même temps, j'ai une zone de liste déroulante, qui utilise également la mémoire "Utilisateurs", mais cette fois, je veux la liste de tous les Utilisateurs qui ont un statut "=2", donc je veux envoyer le param "&mode=2" sur l'appel Ajax pour le back-end.

Si j'utilise quelque chose comme:

store.getProxy().extraParams = {
  status: 2
};

Cela va fonctionner, mais la Grille en même temps être mis à jour pour utiliser "&mode=2". Je veux SEULEMENT la zone de liste déroulante pour utiliser le param.

Je suppose que je pourrais désactiver "autoupdate" sur la Grille, puis réglez le "extraParams" sur le "rendu" de l'événement sur la zone de liste déroulante, puis annuler lorsque la zone de liste déroulante obtient caché, mais ce serait une très laid solution.

Je pouvez également dupliquer le magasin à un "Users2" et l'utiliser pour la zone de liste déroulante, mais c'est d'un laid solution.

Quelle est la bonne façon de le faire? Il doit être quelque chose de très commun pour la plupart des gens.

Mise à JOUR 1:

Je sais que je peux utiliser quelque chose comme:

store.load({
  params:{
    'foo1': bar1,
    'foo2': bar2
  } 
});

Mais comment pourrais-je l'utiliser dans ExtJS 4 MVC? Là je viens de préciser "store: les Utilisateurs" dans la forme-objet. Comment puis-je envoyer ces paramètres supplémentaires à la .fonction load ()?

J'ai essayé ce qui suit:

{
xtype: 'combobox',
fieldLabel: 'Server',
name: 'server',

//store: 'ServersIP',
store: new Cloud.store.ServersIP(),

/*
listeners: {
    beforeload: function(store, options) {
        console.log(store);
    }
},
*/

valueField: 'id',
displayField: 'name_id',
emptyText: 'Select a Server...',
editable: false
},

Cependant, il donne une erreur "Uncaught TypeError: Cannot read property 'ServersIP' undefined"

Mais le nom est correct:

Ext.define('Cloud.store.ServersIP', {

extend: 'Ext.data.Store',
model: 'Cloud.model.Server', 

Aussi, où exactement je l'ai mis à l'auditeur? Je suppose que je n'ai pas qu'une seule bonne dans mon exemple?

Mise à JOUR 2:

J'ai un peu plus loin à une solution maintenant:

store: Ext.create('Cloud.store.ServersIP', {
proxy: {
    extraParams: {
        param1: 'value1',
        param2: 'value2'
    }
},                          
}),

Le ci-dessus ne fonctionne PAS. Il fonctionne si je n'ai qu'un "niveau" de la variable dans les params de Ext.Créer. Pour une raison quelconque, il n'aime pas quand je passe proxy => extraParams => param1.

Celui-ci fonctionne:

store: Ext.create('Cloud.store.ServersIP', {
aaa: 'bbb'
}),

Mais bien sûr, mon extraParams ne sont pas là. Quelqu'un sait comment résoudre cette dernière partie?

Ajouter un beforeload auditeur à la boutique

OriginalL'auteur Daniele Testa | 2013-07-20