【问题标题】:SlickGrid onSelectedRowsChange firing twice when more than one row selected?选择多行时,SlickGrid onSelectedRowsChange 触发两次?
【发布时间】:2011-06-11 20:12:49
【问题描述】:

(有关背景信息,请参阅 this questionthis question...)

给定:

grid = new Slick.Grid("#myGrid", data, columns, options);
grid.setSelectionModel(new Slick.RowSelectionModel());
grid.onSelectedRowsChanged.subscribe(function() { 
   row_ids = grid.getSelectedRows();
   console.log(row_ids);
});

...当我选择一行(比如第 5 行)时,我得到一个输出

[4]

...这是我所期望的。但是,除了这一行之外, CMD+Click 或 SHIFT+Click -ing 另一行(例如,第 3 行)给了我一个输出

[2]
[4, 2]

...这不是我所期望的(我只期望[4, 2])。只要选择的行数为> 1,这似乎就会发生。所以,如果我要继续选择另一行(比如第 17 行),我会得到这个

[16]
[4, 2, 16]

我在console.log 语句上添加了一个断点,并验证onSelectedRowsChanged 被触发了两次:一次用于新单击的行,一次用于所有选定的行。

这是为什么?我只希望它触发一次,为我提供所选行的完整数组。我将如何做到这一点?还是我错过了什么?

【问题讨论】:

  • 您使用的是什么版本的 SlickGrid?我正在使用“v2 master”分支(可能是 2011 年 1 月中旬)的最新结帐,并且没有遇到这个问题
  • 我正在使用“SlickGrid v2.0 alpha”,直接来自 github 页面。我找到了问题的根源...在下面发布...
  • 我的错;更新了上面的问题(而不是在下面回答)。
  • 感谢您分享您的发现。

标签: jquery slickgrid


【解决方案1】:

问题(我后来发现)在于行选择模型Slick.RowSelectionModel()

Specifically, when the row was selected, handleActiveCellChange() AND handleClick() were being called, each which calls setSelectedRanges(), while the former only sets it to the currently clicked row, and the latter sets it to all the selected行。

我通过在init()(在slick.rowSelectionModel.js_grid.onActiveCellChanged 处理程序中取消注册并将调用移到handleClick() 中来解决此问题:

function init(grid) {
   _options = $.extend(true, {}, _defaults, options);
   _grid = grid;
   // _grid.onActiveCellChanged.subscribe(handleActiveCellChange);
   _grid.onKeyDown.subscribe(handleKeyDown);
   _grid.onClick.subscribe(handleClick);
}

...

function handleClick(e, data) {

   ...

   if (!e.ctrlKey && !e.shiftKey && !e.metaKey) {
      handleActiveCellChange(e, data);
      return false;
   }

   ...

}

我不知道作者是否在“v2 master”中修复了这个问题,正如@fbuchinger 所说,我知道这个修复是快速而肮脏的(这会破坏键盘导航和行之间的选择),但它有效并给了我问题中描述的预期行为。由于我更关心点击是否正常工作而不是键盘导航,所以我现在坚持这样做。

有人知道更好的方法吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多