Extj를 사용하여 동적 격자를 만들려고합니다. 그리드는 click 이벤트가 발생하면 열과 레코드 및 레코드 정의 a.k.a Store Fields를 가져 오기 위해 서버로 ajax 요청이 전송 될 때 생성되고 표시됩니다. 각 노드는 다른 그리드 구조를 가질 수 있으며 트리의 노드 레벨에 따라 다릅니다.Extjs 동적 격자
내가 지금까지 함께했다 유일한 방법은
function showGrid(response, request) {
var jsonData = Ext.util.JSON.decode(response.responseText);
var grid = Ext.getCmp('contentGrid'+request.params.owner);
if(grid) {
grid.destroy();
}
var store = new Ext.data.ArrayStore({
id : 'arrayStore',
fields : jsonData.recordFields,
autoDestroy : true
});
grid = new Ext.grid.GridPanel({
defaults: {sortable:true},
id:'contentGrid'+request.params.owner,
store: store,
columns: jsonData.columns,
//width:540,
//height:200,
loadMask: true
});
store.loadData(jsonData.records);
if(Ext.getCmp('tab-'+request.params.owner)) {
Ext.getCmp('tab-'+request.params.owner).show();
} else {
grid.render('grid-div');
Ext.getCmp('card-tabs-panel').add({
id:'tab-'+request.params.owner,
title: request.params.text,
iconCls:'silk-tab',
html:Ext.getDom('grid-div').innerHTML,
closable:true
}).show();
}
}
'click': function(node) {
Ext.Ajax.request({
url: 'showCtn',
success: function(response, request) {
alert('Success');
showGrid(response,request);
},
failure: function(results, request) {
alert('Error');
},
params: Ext.urlDecode(node.attributes.options);
}
이 코드로지고있어 문제가 있다는 것입니다 클릭 이벤트가
을 발사하면 기능이 위라고합니다입니다 showGrid 함수가 호출 될 때마다 새 그리드가 표시됩니다. 최종 사용자는 이전 그리드와 새로운 그리드를 봅니다. 이 문제를 줄이기 위해 그리드를 파괴하고 각 요청에서 그리드 요소를 제거해 보았습니다. 이는 레코드가 이번에는 표시되지 않는다는 문제 만 해결하는 것 같습니다.if(grid) {
grid.destroy(true);
}
내가 원하는 동작은 탭 내에 그리드 결과를 표시하고 해당 탭이 기존 그리드를 대체하는 경우입니다. 어떤 도움을 주셔서 감사합니다. 이 같은 탭에 그리드를 추가하려고 할 때
는
위대한 작동에 원래의 정보를 잘 설명되어 있습니다 : 필자가 발견 이것에 대해 가장 유용한 블로그 게시물의
하나
이 하나입니다. 고맙습니다. 매번 그리드를 파괴하고 다시 만들 때 불행히도 제한된 수의 그리드를 보장 할 수는 없으므로 선택의 여지가 없습니다. 왜 그리드를 파괴하는 것이 좋은 전략으로 간주되지 않습니까? – ken
GridPanel은 마크 업과 메모리 풋 프린트 (노드가 많은 TreePanel을 제외하고)가 상당히 많은 구성 요소입니다. 조심하지 않으면 (또는 Ext에서 과거와 같이 구성 요소 파괴와 관련된 버그가있는 경우) 시간이 지남에 따라 DOM 누출이 발생할 수 있습니다. 그리드를 생성하는 것은 사용자의 관점에서 보면 시간이 많이 걸리므로 그리드를 재 작성하는 것과 단순히 숨겨진 것만을 표시하는 것 사이의 차이는 앱의 인식 성능에 큰 차이가 있습니다 (특히 자주하는 것처럼). 다행히 문제를 해결했습니다. –
잘 알고 있습니다.난 내가 명확한 생각을하면 내가 요구하는 그리드의 수를 제어 할 수 있습니다 경우이 더욱 집중하려고합니다. 어쩌면 봉사하고 그들의 숫자를 제한 할 수있는 그리드 풀을 가지고있을 것입니다. – ken