2012-06-08 4 views
0

현재 JQGrid를 사용하는 웹 응용 프로그램이 있지만 코드 구성을 개선하기 위해 Backbone.js를 도입하려고합니다. 내가 뭘 하려는지, 컬렉션을 사용하여 서버에서 데이터를 가져 와서 정의 된 JQGrid에 JSON 정보를 추가하지만 작동시키지 못한다.백본 : 서버에서 JQGrid로 데이터 가져 오기

var tareasHumanasTable = $("#grillaTH").jqGrid({ 
     datatype: 'local', 
     height: 'auto', 
     colNames:[ colNames...], 
     colModel:[ colModel...] 
} 

그리고 내 모델 및 컬렉션은 다음과 같이 정의됩니다 : 내있는 jqGrid는 다음과 같이 정의된다

window.TareaHumana = Backbone.Model.extend(); 

window.TareaHumanaCollection = Backbone.Collection.extend({ 
    model: TareaHumana, 
    url: "bandejaTareas/buscarTH" 
}); 

내가 클릭하면 서버 통신을 시작하는 버튼이 있습니다. 이제 다음을 수행합니다.

$(function(){ 
    $("#botonBuscar").bind('click',function(){ 
     var tareaHumanaList = new TareaHumanaCollection(); 
     tareaHumanaList.fetch({data: $("#formBandejaTareas").serializeObject()}); 
     //alert("tareaHumanaList.toJSON(): " + tareaHumanaList.toJSON()); 
     tareaHumanaList.each(function(tareaHumana, i){ 
      //alert("tareaHumana.toJSON(): " + tareaHumana.toJSON()); 
      tareasHumanasTable.jqGrid('addRowData', (i + 1), tareaHumana.toJSON()); 
     }); 

코드가 전혀 작동하지 않습니다. Firebug를 사용하여 서버가 올바른 형식으로 데이터를 전송했음을 확인했지만 코드가 작동하지 않습니다. 가장 이상한 점은 "경고 (...)"줄의 주석을 제거 할 때 모든 것이 작동하기 시작한다는 것입니다.

+0

jqGrid 코드를 거의 게시하지 않았으며 JSON 데이터를 테스트하지 않았습니다. 백본 자체는 사용하지 않지만 게시 한 jqGrid 사용법의 일부는 매우 비 효과적입니다. 'addRowData'는 그리드를 채우는 가장 느린 방법입니다. 당신이 그것을 전혀 채우지 않기 때문에'tareaHumana.toJSON()'의 데이터에 문제가있을 수 있습니다. 데이터는 그리드의'colModel'과 일치해야하지만, 루프에서'addRowData'를 사용하기 전에 쓴 것처럼 정말 나쁜 생각입니다. 그리드를 채우는 방법을 더 잘 설명해야합니다. 어떤 식 으로든 JSON 응답과'colModel'의 몇 가지 예가 정말로 필요합니다. – Oleg

+0

이 문제는 JSON 구문 분석과 관련이 없으며 Backbone에서의 비동기 가져 오기와 관련이 있습니다. 그리드 모집단에서 나는이 권고를 따랐다 : http://stackoverflow.com/questions/8646622/how-to-bind-backbone-model-to-jqgrid. 다른 아이디어있어? –

+2

'addowData'의 사용법은 매우 다양합니다. 나는 당신이 [this one] (http://jsfiddle.net/qM98D/67/)으로 언급 한 데모를 바꿀 것입니다. 그리드 *를 데이터로 생성하는 것이 중요합니다 * 그리드를 생성하고 100 행을 추가하면 페이지에 * one * 행을 삽입하거나 * one * 요소를 변경하면 * 모든 기존 요소의 위치가 나타납니다 다시 계산 *. 'gridview : true, data : mydata'를 사용하여 그리드를 생성하면 전 체 컨텐츠를 하나의 작업으로 생성 할 수 있습니다. 더 많은 행이 있으면 그 차이가 더 많이 나타날 것입니다. – Oleg

답변

1

열쇠는 fetch이 비동기임을 나타냅니다. 그러므로 fetch 다음에 즉시 each 번으로 전화하면 컬렉션이 채워지지 않을 것입니다. success 콜백을 사용해야합니다. 예를 들어 this answer을 살펴보십시오.

0

데이터 유형 jsonstring을 사용하고 jqgrid에 corect 데이터 형식을 제공하는 형식 함수를 콜렉션에 작성하십시오.

+0

데이터 유형 : 'local'로 이제는 잘 작동한다. –

관련 문제