web-dev-qa-db-fra.com

utiliser dynamiquement des paramètres supplémentaires en magasin

J'ai un formulaire. Dans le formulaire, j'utilise une comboBox avec une store.

{
    xtype: 'combobox',
    id: 'SubContractor',
    name: 'SubContractor',
    fieldLabel: 'Sub Contractors',
    selectOnFocus: true,
    editable: false,
    displayField: 'FirstName',
    store: 'jsonGetSubContractorsList',
    typeAhead: true,
    allowBlank: false,
    typeAheadDelay: 20,
    valueField: 'SubContractID',
    width: 440,
    labelWidth: 229
}

En magasin, dans le proxy, j'ai extraParams statique, ça marche. 

proxy: {              
    type: 'ajax',
    url: '/admin/contract/subcontractors/jsonsubcontractorslist',
    extraParams: {
        cid : 34
    },
    reader: {
        type: 'json',
        root: 'data'
    }
},

Mais je ne comprends pas comment envoyer l'ID de contrat à mon magasin de manière dynamique.

10
Navdeep
store.getProxy().extraParams = {
    foo: 'bar'
};
store.load();
21
Evan Trimboli

Pour extjs4, c'est plutôt: 

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

Essaye ça:

  .
  . 
  proxy: {
    type: 'ajax',
    api: {
        create: CONTEXT_PATH + '/mvc/odon/create', 
        read: CONTEXT_PATH + '/mvc/odon/list',
        update: CONTEXT_PATH + '/mvc/odon/update',
        destroy: CONTEXT_PATH + '/mvc/odon/delete'
    },
    .
    .

Passer le paramètre:

 var storeDiagnostico= down('gridpanel').getStore();//Ext.create('store.odont.DStore');
        storeDiagnostico.getProxy().setExtraParam("idOdontologia", value);
        storeDiagnostico.load();
2
Edy Aguirre

Dans Chrome et FF, même cela fonctionnera:

store.proxy.extraParams.foo= 'bar';

Mais dans IE8 (personnellement ce problème), A dû le faire comme mentionné par Evan

store.proxy.extraParams = {foo: 'bar'};

Vérifie ça...

1
DarkKnightFan

Désolé les gars, 

J'ai passé plus de temps à comprendre toutes les options disponibles et les différentes. Trop de réponses à ce problème. Je les ai résumées et j'espère que la réponse aidera quelqu'un. 

Lorsque vous créez un magasin (pris en charge par Ext JS 6.x.x, probablement dans des versions antérieures):

var store = Ext.create('YourStore', {
    listeners: {
        // Fires before a request is made. op is an Ext.data.Operation object
        beforeload:function(store,op){
            // Set request parameters (without overriding other parameters)
            op.setParams(Ext.apply(op.getParams()||{},{
                par1:'value'
            }));
        },
        ... 

Lorsque vous définissez un proxy d'un magasin. Pris en charge depuis Ext JS 4.x.x:

proxy: {
    type: 'ajax',
    url: 'rest/dse',
    extraParams: {
        par1: 'value'
    }

Remarque: Les paramètres sont envoyés pour plusieurs requêtes ultérieures dans ce cas!

Lorsque vous chargez des données explicitement. Pris en charge dans toutes les versions de Ext JS (depuis 3.x.x):

store.load({
    params: { par1: "value" }
});

Note: il n’est pas nécessaire de mettre par1 à l’intérieur de ‘’ ou ''.

Autre sous-option, qui utilise l'accès au proxy et son option extraParams:

store.getProxy().extraParams = {
    par1: 'value'
};
store.load();

Sois prudent avec ça. Ce paramètre est envoyé pour plusieurs requêtes ultérieures!

Lorsque vous créez un magasin. Pris en charge uniquement dans la version 3.x Ext JS.  

var genres1 = new Ext.data.Store({
    baseParams: {
        param1: 'value1',
        param2: 'value2'
    },
    // ...
0
Alexandr