2009-10-26 4 views
3

ExtJS 기반 응용 프로그램이 있습니다. 개체를 편집 할 때 여러 개의 탭이있는 ExtJS 창이 나타납니다. 이 탭 중 세 개에는 Ext GridPanels가 있으며 각각 다른 유형의 데이터를 표시합니다. 현재 각 GridPanel에는 자체 JsonStore가 있습니다. 이는 서버에 대한 총 4 개의 AJAX 요청을 의미합니다. 하나는 자바 스크립트로 창을 만들고 하나는 JsonStores에 대한 요청입니다. 세 명의 JsonStores가 하나의 AJAX 호출에서 읽을 수있는 방법이 있습니까? 모든 JSON 데이터를 쉽게 결합 할 수 있습니다. 각 JSON 데이터에는 현재 다른 root 속성이 있습니다.ExtJS : 하나의 AJAX 호출에서 여러 개의 JsonStores가 필요합니까?

편집 :이 내선 2.2,하지 내선 3

답변

3

JSON 응답에서 생성 된 javascript 객체는 load 이벤트가 발생하면 yourStore.reader.jsonData에서 사용할 수 있습니다. 예를 들면 :

yourStore.on('load', function(firstStore) { 
    var data = firstStore.reader.jsonData; 
    otherStore.loadData(data); 
    thirdStore.loadData(data); 
} 

편집 : 가 명확히하기 위해, 각 점포가 (당신이 이미하고있는) 별도의 root 속성을 필요 그래서 그들은 각각의 구성 데이터를 얻을 것입니다.

var conn = new Ext.data.Connection(); 
    conn.request({ 
     url: '/myserver/allInOneAjaxCall', 
     method: 'POST', 
     params: { 
      // if you wish too 
     }, 
     success: function(responseObj) { 
      var json = Ext.decode(responseObj.responseText); 

      yourStore1.loadData(json.dataForStore1); 
      yourStore2.loadData(json.dataForStore2);    

     }, 
     failure: function(responseObj) { 
      var message = Ext.decode(responseObj.responseText).message; 
      alert(message); 

     } 
    }); 

그것은 나를 위해 일한 : 아래 그림과 같이

{ 
    "firstRoot": [...], 
    "secondRoot": [...], 
    "thirdRoot": [...] 
} 
1

당신은 단일 연결 동안 여러 요청을 할 수 Ext.Direct를 사용하여이 작업을 수행 할 수 있습니다.

3

JSON을 AjaxRequest로 직접 가져 와서 각 JSONStore의 loadData() 메소드에 전달할 수 있습니다.

0

아마도 HTTP 캐싱이 도움이 될 수 있습니다. json 데이터를 결합하고, JsonStores가 GET을 사용하는지 확인하고 Firebug에서 두 번째 및 세 번째 요청이 서버에 전달되지 않는지 확인하십시오. 해당 json 응답에 먼 미래의 만료 헤더를 설정해야 할 수도 있습니다. 데이터가 자주 변경 될 것으로 예상되는 경우 좋지 않을 수 있습니다.

0

또 다른 환상적인 방법은 Ext.Data.Connection()를 사용하는 것입니다.

관련 문제