2011-09-20 5 views
3

저장소에서 요청 데이터 매개 변수 beforeload 이벤트를 가져 오려고합니다. 나는 동작 객체가 요청 데이터를 포함 볼 수 있지만 나는 작업 개체에서 그것을 얻을 것으로 보인다 수 없습니다Beforeload 이벤트에 Extjs 4 store의 요청 데이터를받는 방법은 무엇입니까?

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

로드 이벤트 이전에 요청 객체를 얻을 수 및 내부 데이터를 얻을 수있는 방법 어떤 생각 그 요청 객체?

답변

1

난이 당신을 도울 수 있다고 생각

... operation.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

행운. 그것은 나에게 정의되지 않은 것을 준다. –

+0

상점 코드를 게시 할 수 있습니까? – Daniel

+0

코드는 작업 개체의 PARAM 데이터가'beforeload' 이벤트 때까지 정의되지 않은 4.1에서 예를 –

0

extjs4에 대한 이야기지만, 이전 프로젝트에 extjs3에, 나는에 있었다 수 없습니다 내가 그 코드베이스를 가지고 있지 않는 한 supress 및 내선에서 함수를 오버라이드 (override) ..

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

하지 최선의 대답은, 다른 작업에 약 2 년 전이었다.

3

프록시는 요청을 만들고 모든 관련 요청 데이터를 보유합니다. Ext Ajax Proxy의 doRequest 메소드를 대체 할 수 있습니다. 이 작업을 수행하는 올바른 방법은 새 사용자 지정 프록시를 만드는 것입니다. 간결하게하기 위해 프록시에서 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; 
      } 
     }}); 
+0

답장을 보내 주셔서 감사합니다. 매우 유용합니다. –

+0

안녕하세요 John Rice ur 코드를 시도했지만이 오류가 발생했습니다 TypeError : 표현식 'a'[undefined]의 결과가 개체가 아닙니다. 파일에서 : ///android_asset/www/touch/sencha-touch.js : 6 – ekjyot

+0

안녕 ekjyot는 더 나은 오류 메시지를 얻을 수 엽차 - 터치 모든 debug.js에게 istead osencha-touch.js를 사용해보십시오. 이 작업은 다른 방식으로 진행됩니다. 디버그 스크립트를 사용하여 얻을 수있는 추가 오류 정보는 문제의 원인을 좁히는 데 도움이됩니다. –