Extjs 4.0 Grid 점프 문제 연구
4542 단어 ExtJs
오늘 정말 즐거웠어요. 아주 즐거웠어요. 큰 버그를 해결했으니까.헤헤, 신나. 그리고 제가 컴퓨터를 하나 샀어요.
구성: E6600, 2G, 1TB, 1G 외장, HG6450 그래픽
가치를 초과한 것은 겨우 3100위안이다.하하 역시 브랜드 기기, 오 마이 갓, 이렇게 하다니, 과감하게 주문해서 샀는데, 주로 나는 보통 공책을 쓴다
생각해보면 데스크톱을 만드는 것이 비교적 편하다. 게임을 개발하는 것은 모두 좋다.컴퓨터 한 대를 개발하는 것은 정말 쓰기에 부족하다.며칠 후에 2G 메모리 추가
시원하다
본론으로 돌아가면 주로 Extjs4.0 Grid 댄스의 문제점을 다루고 조사 결과 주로 selModel의 문제점을 발견했다
솔루션 1: 감청 취소
코드는 다음과 같습니다.
selModel: Ext.create('Ext.selection.Model', { listeners: {} })
Extjs Blog에서 찾을 수 있습니다.비교적 번거로운 일은 Ext.selection을 사용하지 않는다면.모델, 그러면 위의 방법은 잘 안 돼요.
솔루션 2: 원본 클래스 복사
Extjs 4.0 Grid가 뛰는 주요 원인은 focus 문제입니다.
홈페이지의 말:
BrowserBug: WebKit & IE refuse to focus the element, rather it will focus it and then immediately focus the body. This
temporary hack works for Webkit and IE6. IE7 and 8 are still broken
코드는 다음과 같습니다.
Ext.override(Ext.selection.RowModel, {
onRowMouseDown: function (view, record, item, index, e) {
this.selectWithEvent(record, e);
}
});
또는:
Ext.override(Ext.selection.CheckboxModel, {
onRowMouseDown: function(view, record, item, index, e) {
var me = this;
var checker = e.getTarget('.' + Ext.baseCSSPrefix + 'grid-row-checker');
if (!me.allowRightMouseSelection(e)) {
return;
}
if (me.checkOnly && !checker) {
return;
}
if (checker) {
var mode = me.getSelectionMode();
if (mode !== 'SINGLE') {
me.setSelectionMode('SIMPLE');
}
me.selectWithEvent(record, e);
me.setSelectionMode(mode);
} else {
me.selectWithEvent(record, e);
}
}
});
Ext.override(Ext.grid.plugin.CellEditing, {
cancelEdit: function() {
var me = this,
activeEd = me.getActiveEditor(),
viewEl = me.grid.getView().getEl(me.getActiveColumn());
me.setActiveEditor(null);
me.setActiveColumn(null);
me.setActiveRecord(null);
if (activeEd) {
activeEd.cancelEdit();
}
},
startEdit: function(record, columnHeader) {
var me = this,
value = record.get(columnHeader.dataIndex),
context = me.getEditingContext(record, columnHeader),
ed;
record = context.record;
columnHeader = context.column;
me.completeEdit();
context.originalValue = context.value = value;
if (me.beforeEdit(context) === false || me.fireEvent('beforeedit', context) === false || context.cancel) {
return false;
}
if (columnHeader && !columnHeader.getEditor(record)) {
return false;
}
ed = me.getEditor(record, columnHeader);
if (ed) {
me.context = context;
me.setActiveEditor(ed);
me.setActiveRecord(record);
me.setActiveColumn(columnHeader);
me.editTask.delay(15, ed.startEdit, ed, [me.getCell(record, columnHeader), value]);
}
},
onEditComplete : function(ed, value, startValue) {
var me = this,
grid = me.grid,
sm = grid.getSelectionModel(),
activeColumn = me.getActiveColumn(),
dataIndex;
if (activeColumn) {
dataIndex = activeColumn.dataIndex;
me.setActiveEditor(null);
me.setActiveColumn(null);
me.setActiveRecord(null);
delete sm.wasEditing;
if (!me.validateEdit()) {
return;
}
if (value !== startValue) {
me.context.record.set(dataIndex, value);
}
me.context.value = value;
me.fireEvent('edit', me, me.context);
}
}
});
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
문자열 길이를 계산하고 중국어로 두 개를 계산합니다.텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.