Узнайте, когда строка была отредактирована пользователем

#tabulator

#табулятор

Вопрос:

Мне нужно знать, когда редактирование строки закончилось (это означает, когда редактор ячеек переместился в другую строку или редактор ячеек был скрыт с любыми изменениями), чтобы отправить отредактированные данные в службу. У меня есть cellEditing и cellEdited события, но отправка данных после каждого cellEdited слишком дорого.

Может быть, я могу использовать, например, cellEdited с некоторыми дополнительными проверками, но я не могу понять, как это сделать. Или, может быть, есть лучший способ сделать это?

Ответ №1:

Вы можете вызвать компонент isEdited для ячейки, чтобы узнать, редактировался ли он в прошлом, поэтому при cellEdited обратном вызове вы можете перебирать ячейки в строке до ses, если все они были отредактированы:

 dataEdited:function(cell){
   var cells = cell.getRow().getCells();
   var allEdited = true;

   cells.forEach(function(cell){
      if(!cell.isEdited()){
         allEdited = false;
      }
   });

   if(allEdited){
      //do something when all cells have been edited
   }
}
 

вы также можете снять отредактированный флаг с ячейки, используя функцию ‘clearEdited’ в компоненте cell, это может быть полезно, чтобы позволить пользователю редактировать снова после того, как вы выполнили все, что вам нужно после редактирования строки:

 cell.clearEdited();
 

Комментарии:

1. Большое спасибо за ваш ответ. Я не был точен в формулировке своего вопроса, я фактически имел в виду событие «редактирование строки завершено», когда редактор ячеек был перемещен в другую строку или просто был скрыт с некоторыми изменениями. Вы можете посмотреть на мое временное решение в ответах.

2. Не существует такого события, чтобы табулятор не учитывал изменения для каждой строки. Он рассматривает их только на уровне ячеек. Вы всегда можете просмотреть событие редактирования ячейки и посмотреть, является ли объект строки таким же, как при последнем вызове

Ответ №2:

На данный момент я нашел временное решение.

Прежде всего, я перехватываю cellEdited , сохраняю текущую ячейку и запускаю таймер. Это необходимо определить, будет ли какой-либо редактор отображаться после текущего. Если таймер завершен, я понимаю, что выпуск строки завершен, и выполняю свою работу.

Затем я перехватываю cellEditing , чтобы проверить, продолжается ли редактирование строк. Если cellEdition срабатывает, проверьте наличие таймера, если он есть, остановите таймер и проверьте: находится ли текущая ячейка в строке с последней отредактированной ячейкой, если это так, ничего не делайте (редактирование строки продолжается), если это не так, выполняйте мою работу (редактирование последней строки завершено).

Вот часть моего углового контроллера с кодом:

 editTimerId?: any;
lastEditedCell: Tabulator.CellComponent;

cellEditCompleted(cell: Tabulator.CellComponent) {
  this.lastEditedCell = cell;
  this.editTimerId = setTimeout(() => this.timerComplete(), 2000);
}

timerComplete() {
  // Do the thing
}

cellEditingBegin(cell: Tabulator.CellComponent) {
  if (this.editTimerId) {
    clearTimeout(this.editTimerId);
    this.editTimerId = null;
    let lastRow = this.lastEditedCell.getRow();
    if (cell.getRow() !== lastRow) {
      // Do the thing
    }
  }
}
 

Я думаю, что это решение слишком сложное, поэтому, если у кого-то есть лучший способ, я буду рад его увидеть.