2012-03-23 6 views
1

IBM BusinessSpace 용 위젯을 만들고 있는데 페이징에 어려움이 있습니다. 데이터가 (restlet을 사용하여) 데이터베이스에서 성공적으로 반환되고 표에 표시됩니다. 탐색은 격자 아래에 표시됩니다 (다음 페이지, 이전 페이지, 페이지로 이동, 페이지 수 등). 예를 들어 페이지 당 3 개의 페이지, 5 개의 행이 있고 두 번째 페이지로 이동하려는 경우 페이지 번호 2를 클릭하면 데이터가 다시로드됩니다 (다시 호출되는 것처럼 보임). 첫 번째 5 개의 행 (첫 번째 페이지에 표시됨)이이 페이지에도 표시됩니다. 다른 탐색 옵션 (다음 페이지, ...)을 선택하면 같은 일이 발생합니다. 결론은 모든 클릭이 내 데이터베이스의 처음 5 행에 있음을 의미합니다. 이 문제를 해결하는 방법에 대한 단서가 있습니까? 그리드에 jsonRest를 사용하는 경우이 순간에 아직로드되지 표시된 레코드를 스크롤 할 때, jsonRest가 표시하는 데 필요한 데이터에 대한 요청을JsonRest with EnhancedGrid를 사용하여 페이징이 작동하지 않습니다.

dojo.require("dojo.data.ObjectStore"); 
dojo.require("dojox.grid.enhanced.plugins.Pagination"); 
dojo.require("dojox.grid.EnhancedGrid"); 
dojo.require("dojo.store.JsonRest"); 


var restStore = new dojo.store.JsonRest({target:"https://localhost:9443/Application/hello"}); 

var dataStore = dojo.data.ObjectStore({objectStore: restStore}); 

dojo.ready(function(){ 

    var grid = new dojox.grid.EnhancedGrid({ 

     store: dataStore, <br> 
     structure: [     
      {name:"Value", field:"value", width: "auto"}, 
      {name:"RequestID", field:"requestId", width: "auto"}, 
      {name:"ID", field:"id", width: "auto"}, 
      {name:"Name", field:"name", width: "auto"} 
     ],   
     columnReordering: true, 
     clientSort: true, 
     rowSelector: '20px', 
     rowsPerPage: 5, 
     autoHeight: true, 
     plugins: { 
      pagination: { 
       pageSizes: ["5", "10", "15", "All"], // page length menu options 
       description: true, // display the current position 
       sizeSwitch: true, // display the page length menu 
       pageStepper: true, // display the page navigation choices 
       gotoButton: true, // go to page button 
       position: "bottom" // position of the pagination bar 
      } 
     } 
    }, "gridDiv"); 
    grid.startup(); 
}); 
+0

여기서 서버 측 구현을 추가하십시오. –

답변

2

:

다음은이에 대한 코드입니다 이 호출기가 예상대로 작동하려면 나머지 구현에서 dojo가 작성하는 헤더 (범위 : 0-24)를 소비해야하며,이 것은 Dojo에서 보내서 응답에 필요한 오프셋 및 제한을 알고 있어야합니다 헤더 (Content-Range : items 0-24/66)를 반환해야하며, 숫자는 어디에서부터 표시되어야하는지, 전체 레코드가 얼마나 많은지를 도장에 알려줍니다. 어떤 정보가 jsonRest documentation에서

$range = $request->headers->get('Range'); 

preg_match_all ('/.*?(\d+).*?(\d+)/is', $range, $matches); 

$limit = $matches[2][0]; 
$offset = $matches[1][0]; 

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT {$limit} OFFSET {$offset}"; 
$result = $db->execute($sql); 

$sql2 = "SELECT FOUND_ROWS()"; 
$count = $db->execute($sql2); 

$response->setContent($result); 
$response->headers->set('Content-Range', "items $offset-$limit/{$count}"); 

:

은 (DB 및 응답 실물된다고 가정) PHP 예이다.

+0

JsonRest가 지연로드를 구현할 수있는 방법이 있는지 알고 있습니까? – WoodenKitty

관련 문제