2012-12-19 3 views
2

사용자 정의 헤더를 사용하여 응답 데이터에 대한 추가 정보를 제공하고 싶습니다. Dojo DataGrid의 응답에서 객체 저장소 (dojo 1.7)를 통해 jsonRest 객체에 연결하여 헤더를 가져올 수 있습니까? XHR 요청을 할 때 이것이 possible 인 것을 알지만,이 경우에는 그리드가 만들고 있습니다. Dojo DataGrid jsonrest 응답 헤더

API provides 응답 객체를 반환하는 응답 오류에 대한 이벤트

이를 사용하여

on(this.grid, 'FetchError', function (response, req) { 
     var header = response.xhr.getAllResponseHeaders(); 
    }); 

나는 성공적으로 내 사용자 지정 응답 헤더에 액세스 할 수있게되었습니다. 그러나 요청이 성공하면 응답 개체를 가져 오는 방법이없는 것 같습니다. 내가 뭔가 작업을 얻을 수 있었다 ,하지만 난 그것을 의심 : 난 그냥 응답은

aspect.after(this.grid, '_onFetchComplete', function (response, request) 
{ 
///unable to get headers, response is the returned values 
}, true); 

편집 값, 후, 그러나,이 응답 개체에 대한 액세스를 허용하지 않는 측면과 undocumented 개인 이벤트 _onFetchComplete을 사용하고있다 매우 잘 설계되어 있고 더 나은 이해를 가진 사람이 더 간단한 해결책을 제시 할 수 있습니다. 객체 저장소에 반환되는 나머지 저장소에서 지연된 객체를 유지할 수 있도록 aspect를 추가했습니다. 여기에 헤더를 반환하기 위해 deffered에 새로운 함수를 추가했습니다. 그런 다음 dojo hitch를 사용하여 객체 저장소의 onFetch에 연결했습니다 (현재 범위에서 결과가 필요했기 때문에). 나에게 지저분 해 보인다.

aspect.around(restStore, "query", function (original) { 
    return function (method, args) { 
     var def = original.call(this, method, args); 
     def.headers = deferred1.then(function() { 
      var hd = def.ioArgs.xhr.getResponseHeader("myHeader"); 
      return hd; 
     }); 
     return def; 
    }; 
}); 

aspect.after(objectStore, 'onFetch', lang.hitch(this, function (response) { 
    response.headers.then(lang.hitch(this, function (evt) { 
     var headerResult = evt; 
    })); 
}), true); 

더 좋은 방법이 있습니까?

답변

2

나는이 게시물을 읽은 후 오늘 이것을 해결했다. 나는 다시 먹을 것이라고 생각했다.

dojo/store/JsonRest도 해결되지만 제 코드는 약간 다릅니다.

var MyStore = declare(JsonRest, { 
    query: function() { 
     var results = this.inherited(arguments); 
     console.log('Results: ', results); 
     results.response.then(function (res) { 
      var myheader = res.xhr.getResponseHeader('My-Header'); 
      doSomethingWith(myheader); 
     }); 
     return results; 
    } 
}); 

그래서 당신은 정상 query() 함수를 재정의가 실행하고 약속을 반환하자, 당신은 헤더를 가지고 XHR 객체에 액세스 할 수있는 해결의 '응답'회원에 자신의 수신기를 연결합니다. 이것은 JsonRest 결과를 해석하고 쿼리() 호출자의 체인에 멋지게 맞추어야합니다.

경고의 한 마디로,이 코드는 여기에 게시하기 위해 수정되었으며 실제로는 query()을 (를) 넘은 다른 중개자 클래스에서도 상속 받지만 여기의 기본 사항은 꽤 이상합니다.

+1

표준 json 스토어에서는 다음과 같이됩니다. var results = this.inherited (arguments); results.then (function() { var headers = results.ioArgs.xhr.getResponseHeader ('my-header'); }); –

0

서버에서 정보를 얻고 싶다면 쿠키의 맞춤 키 값을 솔루션으로 사용할 수 있습니다. 제 경우는 맞춤 응답 헤더를 찾고 있지만 만들 수 없습니다. 이 그리드 데이터를 가져온 후 나는 정보를 얻고 쿠키 방법을했다 그래서 일 예는 페이지가 매겨진 데이터 그리드의 모든 행에 대한 SUM (필드)을 제시하고, 만 포함되지하는

dojo.connect(grid, "_onFetchComplete", function(){ 
    doSomethingWith(dojo.cookie("My-Key")); 
}); 

유용 현재 페이지에서 서버에서 COUNT 및 SUM을 가져올 수 있으며 COUNT는 Content-Range 헤더로 보내지고 SUM은 쿠키로 보낼 수 있습니다.