SlickGrid не может удалять добавленные строки, но только существующие. Что я делаю неправильно? - PullRequest
3 голосов
/ 03 февраля 2012

Вот мой код для добавления строки:

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 Ответ

1 голос
/ 03 февраля 2012

Вы, похоже, делаете в своем коде много вещей, которые мне не совсем понятны:

В вашем обработчике onAddNewRow вы:

  1. Делаете недействительнымистрока добавляется.Зачем?Вам не нужно этого делать.
  2. Вы обновляете массив «data» напрямую, но затем выполняете вызов no-op для «dataView».Что вы используете в качестве источника данных - data или dataView?
  3. Вам не нужно указывать сетке updateRowCount () или render ().

В вашем обработчике удаления:

  1. НЕ обращайтесь к SlickGrid DOM напрямую (т. Е. $ (". Slick-cell.selected"))!Вместо этого используйте grid.getSelectedRows ().
  2. Если вы используете «dataView» в качестве источника данных, у вас уже должны быть настроены события для прослушивания изменений DataView и обновления сетки по мере необходимости.Вызовы grid.invalidate () и grid.render () не нужны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...