как получить данные запроса магазина Extjs 4 о событии beforeload? - PullRequest
3 голосов
/ 21 сентября 2011

Я пытаюсь получить параметры данных запроса перед загрузкой события в хранилище. Я вижу, что объект операции содержит данные запроса, но не могу получить их от объекта операции

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

firebug

есть идеи, как включить объект запроса до события загрузки и получить данные внутри этого объекта запроса?

Ответы [ 3 ]

3 голосов
/ 21 сентября 2011

Прокси - это то, что делает запрос и имеет все связанные данные запроса.Вы можете переопределить метод doRequest прокси Ext Ajax.Правильный способ сделать это - создать новый пользовательский прокси, но для краткости приведем пример, обновленный для переопределения doRequest в прокси.Затем вы можете запустить событие, которое передает данные, которые вы хотите, чему угодно, связанному с новым событием, или вы можете записать свою логику в строку, где текущий файл console.log, как в этом примере, закодирован.

    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;
            }
        }});
1 голос
/ 21 сентября 2011

как попробовать операцию.request.params

Я думаю, что это может помочь тебе ...

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'}});
0 голосов
/ 21 сентября 2011

Не могу говорить о extjs4, но в extjs3 в предыдущем проекте мне пришлось подавить и переопределить функцию в ext ..

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

Не самый лучший ответ, поскольку у меня нетэта кодовая база, была около 2 лет назад на другой работе.

...