Vue наблюдатель восстановить старые значения? - PullRequest
0 голосов
/ 05 августа 2020

Я использую этот компонент, чтобы составить список сортируемых элементов. https://sortablejs.github.io/Vue.Draggable/# / simple

У меня есть один массив с элементами в данных компонента моего представления. Затем я использую v-for, чтобы заполнить список, по одной строке для каждого элемента в моем массиве.

Итак, каждый раз, когда я перемещаю один элемент, массив элементов сортируется и меняет порядок элементов массива, вот и все. поведение этого компонента.

Но мне нужно сделать пост-вызов API, чтобы сохранить новый порядок в списке. Итак, я определил наблюдателя над массивом элементов, и каждый раз, когда он сортируется перетаскиваемым компонентом, я делаю запрос к API, если порядок массива изменился.

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

Внутри моего наблюдателя у меня есть prevValues ​​и newValues, которые я использую для сравнения и проверки наличия - любое изменение в порядке элементов, затем сделайте запрос, а затем, если запрос завершится неудачно, восстановите значение данных с помощью массива prevValues.

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

Есть ли способ восстановить старые значения, переданные наблюдателю, без запуска опять наблюдатель?

Спасибо

1 Ответ

1 голос
/ 05 августа 2020

Было бы более надежно реагировать на события перетаскивания для запуска ваших вызовов API, а не наблюдать за данными. Таким образом, ваш код будет работать только в ответ на действия пользователя.

В качестве альтернативы, sta sh копия исходного массива и используйте что-то вроде deep-equal , чтобы сравнить его с последним значение, чтобы определить, было ли изменено перед вызовом.

...