Я использую библиотеку handsontable и очень удивился, когда обнаружил нет обратного вызова onEdit.

Я попытался создать его, используя сценарий, предоставленный одним пользователем в той же проблеме, но он похоже, это старая версия, и она больше не работает.

Я пытался придумать, как добавить крючок, но документация по нему довольно скудная из-за ручного управления. Кто-нибудь знает, как создать такой обратный вызов для handsontable?

1
Alvaro 15 Апр 2015 в 18:26

1 ответ

Лучший ответ

Захвата только двойных щелчков недостаточно, поскольку пользователь может далее войти в режим редактирования с помощью клавиш Enter или F1 .

Одним из решений проблемы отсутствия обратного вызова onEdit является регистрация специального редактора. Таким образом, он прекрасно вписывается во весь жизненный цикл редактирования-сохранения-выхода (например, клавиша Esc закрывает редактор и теряет все изменения). Вот очень упрощенный редактор, расширяющий встроенный и используемый по умолчанию TextEditor:

var LoggingEditor = Handsontable.editors.TextEditor.prototype.extend();

LoggingEditor.prototype.getValue = function() {
    console.log('User finished editing the cell, the value will be set to: '
                + this.TEXTAREA.value);
    return this.TEXTAREA.value;
};

LoggingEditor.prototype.setValue = function(newValue){
    console.log('User started editing the cell, value shown in cell is: '
                + newValue);
    this.TEXTAREA.value = newValue;
};

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

2
Milan Milanov 17 Апр 2015 в 22:59
Спасибо, Милан! Выглядит отлично! Но, похоже, это не работает при определении параметра columns: jsfiddle.net/fws1vc5e/19 Избавление от него работает должным образом. Любое решение для этого?
 – 
Alvaro
20 Апр 2015 в 17:57
Я обнаружил, что могу добавить его в параметр columns как еще один атрибут каждого столбца, но он создает другая проблема.
 – 
Alvaro
20 Апр 2015 в 19:11