при каждом изменении на бэке фронт получает новый json, в которое хранятся записанные табличные данные.
2. На основании этих данных vue каждый раз перерисовывает таблицу с нуля.
Я хочу:
Чтобы эта таблицу можно было редактировать онлайн. Соответственно у меня реализован механизм, что если кликнуть на div блок ячейки, он становится input, где я могу ввести данные и отправить их на сервер пост запросом.
И как бы этот механизм работает, но
Проблема:
В момент, когда я ввожу в input данные, может прилететь по вебсокету новый пакет данных и он перерисует таблицу, что приведет к:
Потере введенных в input данных.
Потери самого инпута (вместо него снова будет див блок)
Решение:
Пока вижу два:
1. На момент активации инпута - отключать вебсокет соединение. Но не хотелось бы. Т.е. я бы хотел чтобы все табличные данные все так же постоянно обновлялись, кроме тех ячеек, что сейчас редактируются.
2. Как-то добавить обработку в отрисовку, чтобы обходить див блоки, которые имеют css class disabled со свойством display: none;
Но если честно, мне не один из вариантов не нравится. Можете подсказать, плз, что еще можно сделать?
клон делай
Клон данных в смысле?
Отрисовка повторяющихся элементов во Vue работает так, что изменяются только те элементы, у которых изменились пропсы, поэтому может быть не нужно обнулять массив со значениями. Моё решение: 1) Перед тем как редактировать ячейку вы запоминаете её значение и кладёте в переменную 2) Если во время редактирования данных приходят новые данные вы можете обновить все строки, кроме редактируемой (или даже все ячейки кроме редактируемой) 3) При сохранении вы можете сделать prompt, что данные изменились на —> 'qwerty', вы действительно хотите перезаписать значение. И если нажимается на "да", то просто перезаписываются.
Обсуждают сегодня