Comment obtenir les données de requête de Extjs 4 sur l'événement Beforeload?

J'essaie d'obtenir des données de demande params avant que l'événement soit en magasin. Je peux voir que l'objet d'opération contient les données de la requête, mais je ne peux pas l'obtenir à partir de l'objet d'opération

Ext.create('Ext.data.Store', { autoLoad : true, fields : [ {name: 'item_code', type: 'string'}, {name: 'quantity', type: 'int'}, {name: 'description', type: 'string'} ], storeId : 'summary', proxy : { type : 'ajax', actionMethods : 'POST', extraParams : {'filter': 'branch', 'branch': location }, url : 'reports/stock_summary', reader: { type : 'json', root : 'data' } }, listeners: { beforeload: function(store, operation, options){ console.log( operation ) } } }); 

pyromane

Une idée de la façon d'obtenir un objet de demande avant l'événement de chargement et d'obtenir des données à l'intérieur de cet objet de demande?

Comment essayer operation.request.params

Je pense que cela pourrait vous aider …

 var test = Ext.create('Ext.data.Store', { autoLoad : true, fields : [ {name: 'item_code', type: 'string'}, {name: 'quantity', type: 'int'}, {name: 'description', type: 'string'} ], storeId : 'summary', proxy : { type : 'ajax', actionMethods : 'POST', extraParams : {'filter': 'branch', 'branch': location }, url : 'reports/stock_summary', reader: { type : 'json', root : 'data' } }, listeners: { beforeload: function(store, operation, options){ console.log( 'manual load ' + operation.params ); console.log( operation.params ); console.log( 'proxy defined params ' + store.proxy.extraParams ); console.log( store.proxy.extraParams ) } } }); test.load({params: {test: '123'}}); 

Le proxy est ce qui fait la demande et contient toutes les données de requêtes connexes. Vous pouvez remplacer la méthode doRequest de Ext Ajax Proxy. La façon correcte de le faire est de créer un nouveau proxy personnalisé, mais pour plus de brièveté, voici votre exemple mis à jour pour remplacer doRequest dans le proxy. Vous pouvez ensuite déclencher un événement qui transfère les données que vous voulez de tout ce qui est lié au nouvel événement ou vous pouvez écrire votre logique en ligne où le courant console.log est tel que cet exemple est codé.

  Ext.create('Ext.data.Store', { autoLoad : true, fields : [ {name: 'item_code', type: 'string'}, {name: 'quantity', type: 'int'}, {name: 'description', type: 'string'} ], storeId : 'summary', proxy : { type : 'ajax', actionMethods : 'POST', extraParams : {'filter': 'branch', 'branch': location }, url : 'reports/stock_summary', reader: { type : 'json', root : 'data' }, /* * override Ext Ajax Proxy doRequest method * must be maintained when Ext library is updated in the app */ doRequest: function(operation, callback, scope) { var writer = this.getWriter(), request = this.buildRequest(operation, callback, scope); if (operation.allowWrite()) { request = writer.write(request); } Ext.apply(request, { headers : this.headers, timeout : this.timeout, scope : this, callback : this.createRequestCallback(request, operation, callback, scope), method : this.getMethod(request), disableCaching: false // explicitly set it to false, ServerProxy handles caching }); /* * do anything needed with the request object */ console.log('request', request); console.log('request.params', request.params); Ext.Ajax.request(request); return request; } }}); 

Je ne peux pas parler pour extjs4, mais dans extjs3 sur un projet antérieur, j'ai dû supprimer et remplacer une fonction en ext ..

 (function(){ var originalFn = path.to.functionNAme path.to.functionName = function(...) { //frob data here originalFn(...); } }) 

Pas la meilleure réponse, car je n'ai pas cette base de code, il y a environ 2 ans sur un autre travail.