ax5ui grid header 3단 이상시 오류 발생하는 문제

tip

(Ks C) #1

image

전에도 같은 이슈가 있었던걸로 아는데요
저도 해더를 3단으로 쓰려다보니 같은 오류가 발생해서 수정 내용 공유합니다.

git이나 기타 적용 방법을 몰라서 글로 남겨요

////수정내용/////
//총문제 2개
//바로 아래 단계의 header col수만큼만 span을 증가시키는데
//바로 아래 단계의 header의 자식 col수도 더해줘야함
//또한 3단으로 가면서 colIndex 붙이는것 또한 변경해줘야함

ax5grid.js 파일 수정 내용
makeHeaderTable(_columns) 이함수 1개 수정했습니다.

var makeHeaderTable = function makeHeaderTable(_columns) {
var columns = _columns,
        cfg = this.config,
        table = {       rows: []        },
        colIndex = 0,
        maekRows = function maekRows(_columns, depth, parentField) {
        var row = { cols: [] };
        var i = 0,
            l = _columns.length;
        var colspan = 1;
        var subcolspan = 0;

        for (; i < l; i++) {
            var field = jQuery.extend({}, _columns[i]);
            colspan = 1;

            if (!field.hidden) {
                field.colspan = 1;
                field.rowspan = 1;

                field.rowIndex = depth;
                field.colIndex = function (index) {
                    if (!parentField || index != 0) {
                        return colIndex++;
                    } else {
                        colIndex = parentField.colIndex + i + 1;
                        return parentField.colIndex + i;
                    }
                }(i);

                row.cols.push(field); // 복제된 필드 삽입

                if ('columns' in field) {
                    colspan = maekRows(field.columns, depth + 1, field);
                } else {
                    field.width = 'width' in field ? field.width : cfg.columnMinWidth;
                }
                field.colspan = colspan;
                subcolspan += colspan;
            } else {}
        }

        if (row.cols.length > 0) {
            if (!table.rows[depth]) {
                table.rows[depth] = { cols: [] };
            }
            table.rows[depth].cols = table.rows[depth].cols.concat(row.cols);
            return subcolspan;
        } else {
            return colspan;
        }
    };

    maekRows(columns, 0);

    // set rowspan
    for (var r = 0, rl = table.rows.length; r < rl; r++) {
        for (var c = 0, cl = table.rows[r].cols.length; c < cl; c++) {
            if (!('columns' in table.rows[r].cols[c])) {
                table.rows[r].cols[c].rowspan = rl - r;
            }
        }
    }

    return table;
};

(Thomas) #2

대단하십니다.
기왕이면 pull request해주시면 참 좋을 텐데요.
제가 고친부분도 아닌데 제가 고친 것처럼 되는 것도 아닌거 같구요.

gitHub https://github.com/ax5ui/ax5ui-kernel 에서 fork버튼 누른다음에

git clone [forked git repo]하세요.

소스가 내려받아지면 수정후에 git commit -a, git push 하면 포크된 플젝에 소스가 푸시됩니다.
그 후에 gitHub에서 pull request할 수 있습니다.