문제

EXTJS 기반 응용 프로그램이 있습니다. 객체를 편집 할 때 extjs 창이 여러 탭과 함께 나타납니다. 이 탭 중 3 개에는 Ext GridPanel이 있으며 각각은 다른 유형의 데이터를 보여줍니다. 현재 각 GridPanel에는 자체 JSONSTORE가 있습니다. 하나의 Ajax 호출에서 3 개의 jsonstores를 모두 읽을 수있는 방법이 있습니까? 나는 모든 JSON 데이터를 쉽게 결합 할 수 있습니다. 각 데이터는 현재 다릅니다. root 재산.

편집하다: 이것은 Ext 3이 아닌 내선 2.2입니다.

도움이 되었습니까?

해결책

JSON 응답에서 만든 JavaScript 객체는 yourStore.reader.jsonData 상점이있을 때 load 이벤트가 해고되었습니다. 예를 들어:

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

편집 : 명확히하기 위해서는 각 상점이 별도가 필요합니다. root 속성 (이미하고있는)은 각각 데이터를 얻을 수 있습니다.

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

다른 팁

AjaxRequest로 JSON을 직접 가져온 다음 각 JSONSTORE의 loadData () 메소드로 전달할 수 있습니다.

단일 연결 중에 여러 요청을 할 수있는 ext.direct를 사용 하여이 작업을 수행 할 수 있습니다.

아마도 HTTP 캐싱이 당신을 도울 수 있습니다. JSON 데이터를 결합하고 JSONSTORE가 GET를 사용하고 있는지 확인하고 FireBug를보고 2 차 및 세 번째 요청이 서버로 이동하지 않도록하십시오. JSON 응답에서 먼 미래가 만료 된 헤더를 설정해야 할 수도 있습니다. 해당 데이터가 자주 변경 될 것으로 예상되는 경우 좋지 않을 수 있습니다.

또 다른 환상적인 방법은 사용하는 것입니다 ext.data.connection () 아래 그림과 같이 :

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);

        }
    });

그것은 나를 위해 일했다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top