2016-06-09 2 views
1

우리는 jgGrid를 사용하고 있으며 완벽하게 작동합니다. 그리드가 어떻게 설정되는지, 서버에서 json 데이터를 가져 오는 loadonce : true를 설명하겠습니다.서버에서 JqGrid 업데이트 데이터

이제 우리는 그리드를 20 초마다 업데이트 할, 그래서

setInterval(function() { 
       $("#jqGrid").setGridParam({ datatype: 'json', page: 1 }).trigger('reloadGrid', [{ current: true }]); 

      }, 20000); 

것은이 잘 작동된다. 문제는 그리드가 완전히 새로 고침되어 변경된 데이터를 업데이트하려고하는 것입니다. 열의 한 셀에서만 변경이 있으면 해당 셀만 변경해야합니다.

그리드 전체를 새로 고치면 정렬 및 검색 필터에서 문제가 발생합니다. 그것은 20 초 후에 모든 것을 대체합니다. 사전

답변

1

데이터가 변경되지 않은 경우 false을 반환 beforeProcessing 콜백의 사용 될 문제를 해결하는 가장 간단한 방법으로

감사합니다. 서버에서 반환 된 데이터가 변경되지 않은 경우 (이전 응답과 비교하여) 그리드가 다시로드되는 것을 방지합니다. 이 시나리오는 the answer에 자세히 설명되어 있습니다. 주요 문제는 반환 된 데이터가 동일한 지 확인하는 방법입니다. 참조 된 이전 대답에서 서버 측의 데이터에서 MD5 캐시를 계산하고 값을 Etag으로 설정합니다. 또는 CryptoJS을 사용하여 클라이언트 측에서 계산할 수 있습니다. beforeProcessing 콜백의 3-d 매개 변수는 개체의 수퍼 집합 인 jqXHR입니다. 예를 들어 responseText 속성이 포함되어 MD5 계산을 단순화합니다. jqXHR.getResponseHeader("ETag")을 사용하면 ETag HTTP 헤더에 액세스 할 수 있습니다.

전체 표로 다시로드은 일반적으로 성능에 문제가 없습니다. 그리드의 셀을 수정하면 reflow이되거나 페이지의 다른 요소 위치가 바뀔 가능성이 중요합니다. 전체 그리드의 재로드는 <tbody> (그리드를 올바르게 채우는 경우 및 gridview: true 옵션을 사용하는 경우) 할당으로 구현됩니다. 많은 추가 작업이 필요한 것처럼 보이지만 그리드의 여러 행에서 여러 셀을 순차적으로 변경하는 것이 더 신속하게 수행 될 수 있습니다.

어떤 식 으로든 beforeProcessing 콜백을 구현하는 것이 좋습니다.이 콜백은 변경되지 않은 서버 데이터의 경우 false을 반환합니다. 실제 성능 문제가있는 경우에만 자세한 성능 문제를 분석하고 기존 코드를 더 많이 변경해야합니다.

+0

의견을 보내 주셔서 감사합니다. beforeProcessing 콜백을 구현하려고합니다. –

+0

https://github.com/tonytomov/jqGrid/issues/789 @tonytomov는 이미 내 질문에 대답했지만 여전히 전 처리를하고 싶습니다. –

+1

@JohnyBravo : 천만에요! 내 대답은 jqGrid를 다시로드하는 것이'setRowData'의 사용으로 훨씬 더 효과적 일 것이라고 썼습니다. 또한 귀하의 질문에 충분한 내용을 포함시키지 않았습니다. 예를 들어'rowNum : 5, loadonce : true'를 사용하면'setRowData'를 사용하여 데이터를 업데이트하려고 시도합니다. ** 현재 페이지의 데이터 **에서만 작동합니다. 다른 페이지에서 데이터가 변경되면'setRowData'가 작동하지 않습니다. 또한 다른 페이지의 데이터를 변경하고 다시로드하면'sortname'에 따라 행의 순서가 바뀔 수 있으며'setRowData'가있는 솔루션은 제대로 작동하지 않습니다. – Oleg