У меня проблемы с адаптацией нашего нового приложения Seaside. Цель приложения - показать данные контракта в каскадном виде (в концепции, как дерево, но визуально только компоненты внутри компонентов): на верхнем уровне названия контрактов, щелчок по ним показывает так называемые «наборы» эти контракты содержат, щелчок по ним показывает так называемые «части», которые они содержат, и так далее.
![image showing our gui](https://i.stack.imgur.com/a935j.jpg)
В черновой версии, которую мы сделали, мы просто загружаем всю информацию на клиент и затем используем:
renderContentOn: html
....
html div
onClick: (html scriptaculous effect id: tmpid; toggleAppear);
onClick: (html scriptaculous request callback: [visible:=self visible not]);
with: ...
для успешного смешивания и смешивания подкомпонентов различных уровней.
Загрузка всей информации на клиент была только для черновой версии; для следующей версии мы хотим динамически загружать только те ветви, которые пользователь хочет расширить. Мы знаем, как сделать это в соответствии с Seaside-Book, и, выполнив следующие действия, мы заставляем клиента корректно обновляться:
onClick: (html jQuery ajax script: [:s|
s << (s jQuery: tmpid) append: ...
Однако: у нас возникают проблемы с сохранением правильного состояния клиента и состояния сервера: мы хотим сохранить состояние частей дерева (не загружено / развернуто / свернуто для каждого узла в дереве), даже когда пользователь использует html-form-input (см. рисунок) для изменения содержимого дерева. Мы также хотим сохранить состояние, если соединение на короткое время недоступно (в противном случае все состояние и редактирование поля пользователя потеряны, и отображается 404, кнопка возврата приведет к непоследовательному сеансу, в худшем случае). Ситуация еще сложнее, потому что мы хотим разрешить такое поведение для нескольких пользователей; конечно, с семантикой, что у каждого пользователя есть различное древовидное состояние (не загружено / развернуто / свернуто для каждого узла в дереве), но согласованные записи в полях данных.
У вас есть шаблон или минимальный пример, с помощью которого можно обновить серверную сессию?