У меня есть древовидная структура, которую нужно переставить (перетащить и отпустить), а затем отправить изменения.
Что будет лучшим способом для получения изменений?На мой взгляд, есть два способа:
- Сохранить каждую команду изменения, отправить список изменений, затем выполнить каждую
- Сериализировать дерево и затем разнести новое дерево со старымдерево, чтобы выяснить, что изменилось, затем выполнить изменения
1 кажется наиболее простым в реализации, хотя это может быть очень расточительным, если произошло много повторяющихся действий (например, перетаскивание узлов вокруг много раз, но их возвратс чего они начали)
2 позволяет избежать вышеуказанной проблемы, но как я могу "различить" деревья, чтобы определить, какие родительские команды изменения нужно выполнить?Предположительно, есть алгоритмы для этого?
Редактировать Для пояснения, у каждого узла есть "id" и "parentId".Мне нужно разрешить пользователям переупорядочивать дерево (изменяя таким образом parentId некоторых узлов).
Для варианта 2 достаточно просто упростить сериализацию измененного дерева, а затем обработать различия итерацией поисходное дерево в предзаказе, найти тот же узел в новом дереве и записать изменение, если родители разные?это надежный подход, который не застрянет в цикле?
Edit на самом деле нет, это не сработает.Мне нужно перебрать дерево NEW в предзаказе и найти соответствующий узел в старом дереве, затем указать идентификаторы родительского элемента и т. Д.
Спасибо