SlickGrid无法删除添加的行,但只能删除现有的行。我究竟做错了什么?

时间:2012-02-03 09:59:41

标签: javascript jquery slickgrid

以下是我添加行的代码:

grid.onAddNewRow.subscribe(function (e, args) {
    var item = args.item;
    id=id+1;
    item["id"] = "id_"+id;
    grid.invalidateRow(data.length);
    data.push(item);
    dataView.beginUpdate();
    dataView.endUpdate();
    grid.updateRowCount();
    grid.render();
});

这是我删除行的代码:

if ((event.which == 46)) {
    $(".slick-cell.selected").parent().each(function() {
        var item = dataView.getItem($(this).attr("row"));
        var rowid = item.id;
        dataView.deleteItem(rowid);
        grid.invalidate();
        grid.render();
    });
}

这适用于已存在的行,但不适用于已添加的行。由于某些原因,新行的item变量未定义。我做错了什么?

已编辑 谢谢,锡!所以我得到了一个解决方案:

      grid.onAddNewRow.subscribe(function (e, args) {
        var item = args.item;
        id=id+1;
        item["id"] = "id_"+id;
        data.push(item);
        dataView.beginUpdate();
        dataView.setItems(data);
        dataView.endUpdate();
      });

       if ((event.which == 46)){
            var rows = grid.getSelectedRows();
            for (var i = 0, l = rows.length; i < l; i++) {
                var item = dataView.getItem(rows[i]);
                var rowid = item.id;
                dataView.deleteItem(rowid);
            }
        }

1 个答案:

答案 0 :(得分:1)

你似乎在你的代码中做了很多对我来说没有意义的事情:

在你的onAddNewRow处理程序中,你是:

  1. 使正在添加的行无效。为什么?你不需要这样做。
  2. 直接更新“data”数组,然后在“dataView”上执行no-op调用。您使用什么作为数据源 - 数据或dataView?
  3. 您无需告诉网格updateRowCount()或render()。
  4. 在删除处理程序中:

    1. 不要直接访问SlickGrid DOM(即$(“。slick-cell.selected”))!请改用grid.getSelectedRows()。
    2. 如果您使用“dataView”作为数据源,则应该已经连接了事件来监听DataView更改并根据需要更新网格。不需要调用grid.invalidate()和grid.render()。