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

좋은 웹페이지 즐겨찾기