SlickGrid onSelectedRowsChanged没有开火

时间:2015-04-22 18:07:53

标签: javascript jquery angularjs slickgrid

我对slickgrid有以下问题:

  1. 左键单击第1行(onSelectedRowsChanged按预期触发)
  2. 按住控制按钮
  3. 左键单击第2行(onSelectedRowsChanged按预期触发)
  4. 左键单击第1行(onSelectedRowsChanged按预期触发)
  5. 放开控制按钮
  6. 点击第1行 (onSelectedRowsChanged不会触发!如果您点击与之前相同的第1行单元格)
  7. 上述第6步所述的问题。这是一个显示问题的jsfiddler的链接: http://jsfiddle.net/fortesl/oLj8otsj/1/

    代码也附上:

             var grid;
         var data = [];
         var columns = [{
             id: "title",
             name: "Title",
             field: "title",
             width: 300,
             selectable: false,
             resizable: false
         }, {
             id: "priority",
             name: "Priority",
             field: "priority",
             width: 200,
             selectable: false,
             resizable: false
         }];
    
         var options = {
             editable: true,
             enableAddRow: true,
             enableCellNavigation: true,
             forceFitColumns: true,
             autoEdit: false
         };
    
         for (var i = 0; i < 100; i++) {
             var d = (data[i] = {});
             d["title"] = "Task " + (i + 1);
             d["priority"] = "Medium";
         }
    
         grid = new Slick.Grid("#myGrid", data, columns, options);
    
         grid.setSelectionModel(new Slick.RowSelectionModel());
    
         grid.onSelectedRowsChanged.subscribe(function () {
             var selectedRows = grid.getSelectedRows();
             for (var i = 0; i < selectedRows.length; i++) {
                 selectedRows[i] = selectedRows[i] + 1;
             }
             $('.selected-rows')[0].innerHTML = selectedRows;
         });
         grid.onClick.subscribe(function () {
             $('.selected-rows')[0].innerHTML = '';
         });
    

    请帮忙

3 个答案:

答案 0 :(得分:0)

我通过处理OnClick事件并从处理程序调用setSelectedRows解决了我的问题。如下所示:

                grid.onClick.subscribe(function(e) {
                var cell = $scope.grid.getCellFromEvent(e);
                var row = (cell) ? cell.row : 0;
                var rows = [row];
                grid.setSelectedRows(rows);
            });

答案 1 :(得分:0)

这是因为单元格(不是行)处于活动状态,并且在slick.grid.js中有一项检查,确保在单击已经激活的单元格时不会激活触发器。

看看

 function handleClick(e)...

在源代码文件中,您将看到有问题的检查。

答案 2 :(得分:0)

OnClick事件和调用setSelectedRows给出了所选行的另一个高亮颜色(更像黄色粉红色)而不是onSelectedRowsChanged(我的应用程序中为蓝色)