Модель выбора ячеек ExtJS с PivotGrid не работает - PullRequest
0 голосов
/ 07 октября 2010

Я пытаюсь изменить SelectionModel PivotGrid, и он не работает. Вот мой код Может кто-нибудь сказать, что я делаю не так.

Мне нужно использовать cellSelectionModel, так как я хочу провести детализацию, и мне нужна верхняя и левая оси, чтобы получить точки пересечения.

Я также безуспешно пробовал событие cellclick в API EXTJS 3.3. Кто-нибудь получит модель выбора, отличную от работающей по умолчанию RowSelectionModel?

var pivotAccumGrid = new Ext.grid.PivotGrid({
    store     : my_store,
    aggregator: 'count',
    measure   : 'my_field',
    sm: new Ext.grid.CellSelectionModel({  //I have also tried selModel for key
        listeners: {
            cellselect: function(sm,row,col) {
                Ext.Msg.alert('click','got a click!');
            }
        }
    }),
    topAxis: [ {dataIndex: 'top_field'},{dataIndex: 'top_field2'}  ],
    leftAxis: [ {dataIndex: 'left_field',  width: 80} ],
});

1 Ответ

1 голос
/ 13 октября 2010

Это быстрое исправление, которое вводит новое свойство для meta в PivotGridView, чтобы впоследствии его можно было использовать для отката индексов ячеек. Большая часть кода не отличается, просто введение meta.id в renderRows и разбиение meta.id в getCellIndex.

Ext.override(Ext.grid.PivotGridView, {    
    renderRows : function(startRow, endRow) {
        var grid          = this.grid,
            rows          = grid.extractData(),
            rowCount      = rows.length,
            templates     = this.templates,
            renderer      = grid.renderer,
            hasRenderer   = typeof renderer == 'function',
            getCellCls    = this.getCellCls,
            hasGetCellCls = typeof getCellCls == 'function',
            cellTemplate  = templates.cell,
            rowTemplate   = templates.row,
            rowBuffer     = [],
            meta          = {},
            tstyle        = 'width:' + this.getGridInnerWidth() + 'px;',
            colBuffer, column, i;

        startRow = startRow || 0;
        endRow   = Ext.isDefined(endRow) ? endRow : rowCount - 1;

        for (i = 0; i < rowCount; i++) {
            row = rows[i];
            colCount  = row.length;
            colBuffer = [];

            rowIndex = startRow + i;

            //build up each column's HTML
            for (j = 0; j < colCount; j++) {
                cell = row[j];

                meta.id    = i + '-' + j;
                meta.css   = j === 0 ? 'x-grid3-cell-first ' : (j == (colCount - 1) ? 'x-grid3-cell-last ' : '');
                meta.attr  = meta.cellAttr = '';
                meta.value = cell;

                if (Ext.isEmpty(meta.value)) {
                    meta.value = '&#160;';
                }

                if (hasRenderer) {
                    meta.value = renderer(meta.value);
                }

                if (hasGetCellCls) {
                    meta.css += getCellCls(meta.value) + ' ';
                }

                colBuffer[colBuffer.length] = cellTemplate.apply(meta);
            }

            rowBuffer[rowBuffer.length] = rowTemplate.apply({
                tstyle: tstyle,
                cols  : colCount,
                cells : colBuffer.join(""),
                alt   : ''
            });
        }

        return rowBuffer.join("");
    },

    getCellIndex : function(el) {
        if (el) {
            var match = el.className.match(this.colRe),
                data;

            if (match && (data = match[1])) {
                return parseInt(data.split('-')[1], 10);
            }
        }
        return false;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...