Extjs : 하나의 Ajax 호출에서 여러 JSONSTORES?
-
06-07-2019 - |
문제
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);
}
});
그것은 나를 위해 일했다.