slickgrid ( nsunleo-slickgrid ) 4 解决点击不切换单元格的问题

  上一次解决了列选择和区域选择冲突的问题,昨天太忙了,并且要陪小宝早点睡觉,就啥也没有赶上。今天上班面试、支持项目、Jdk修改成OpenJdk、Springboot1.5x 升版2.x最后两个微服务改造和部署,晚上还加了个班,解决其他项目组服务部署的问题。晚上回来继续完善nsunleo-slickgrid。

  今天要解决的问题是slickgrid点击不切换单元格,这个问题还挺难排查的,调试监控了一下handleClick事件,发现了点蹊跷的地方,但是依旧没有确认问题。

function handleClick(e) {
            if (!currentEditor) {
                // if this click resulted in some cell child node getting focus,
                // don't steal it back - keyboard events will still bubble up
                // IE9+ seems to default DIVs to tabIndex=0 instead of -1, so check for cell clicks directly.
                if (e.target != document.activeElement || $(e.target).hasClass("slick-cell")) {
                    setFocus();
                }
            }

            var cell = getCellFromEvent(e);

            if (!cell || (currentEditor !== null && activeRow == cell.row && activeCell == cell.cell)) {
                return;
            }

            trigger(self.onClick, {
                row: cell.row,
                cell: cell.cell
            }, e);
            if (e.isImmediatePropagationStopped()) {
                return;
            }



            // stone 不用切换 (activeCell != cell.cell || activeRow != cell.row) && canCellBeActive(cell.row, cell.cell)
            if (canCellBeActive(cell.row, cell.cell)) {
                if (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()) {
                    if (hasFrozenRows) {
                        if ((!(options.frozenBottom) && (cell.row >= actualFrozenRow))
                            || (options.frozenBottom && (cell.row < actualFrozenRow))
                        ) {
                    scrollRowIntoView(cell.row, false);
                    setActiveCellInternal(getCellNode(cell.row, cell.cell));
} }  } } }

  这里面有个hasFrozenRows的条件,由于我没有配置FrozenRows,所有不会触发滚动和激活切换,其实是通过和主线版本比对才发现问题的(-_-||)。

  定位问题就好解决了,于是增加分支逻辑,在没有设置hasFrozenRows的时候,激活滚动到当前行并设置当前行为激活状态,修改后的代码:

// stone 不用切换 (activeCell != cell.cell || activeRow != cell.row) && canCellBeActive(cell.row, cell.cell)
            if (canCellBeActive(cell.row, cell.cell)) {
                if (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()) {
                    if (hasFrozenRows) {
                        if ((!(options.frozenBottom) && (cell.row >= actualFrozenRow))
                            || (options.frozenBottom && (cell.row < actualFrozenRow))
                        ) {
                            scrollRowIntoView(cell.row, false);
                            setActiveCellInternal(getCellNode(cell.row, cell.cell));
                        }
                    }else{
                        scrollRowIntoView(cell.row, false);
                        setActiveCellInternal(getCellNode(cell.row, cell.cell));
                    }
                }
            }

  修正后的效果:

  

版权声明:本文为nsunleo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/nsunleo/p/14520932.html