Помощь в настройке Seaside-App (нужен шаблон или минимальный пример) - PullRequest
2 голосов
/ 08 апреля 2011

У меня проблемы с адаптацией нашего нового приложения Seaside. Цель приложения - показать данные контракта в каскадном виде (в концепции, как дерево, но визуально только компоненты внутри компонентов): на верхнем уровне названия контрактов, щелчок по ним показывает так называемые «наборы» эти контракты содержат, щелчок по ним показывает так называемые «части», которые они содержат, и так далее. image showing our gui

В черновой версии, которую мы сделали, мы просто загружаем всю информацию на клиент и затем используем:

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, кнопка возврата приведет к непоследовательному сеансу, в худшем случае). Ситуация еще сложнее, потому что мы хотим разрешить такое поведение для нескольких пользователей; конечно, с семантикой, что у каждого пользователя есть различное древовидное состояние (не загружено / развернуто / свернуто для каждого узла в дереве), но согласованные записи в полях данных.

У вас есть шаблон или минимальный пример, с помощью которого можно обновить серверную сессию?

1 Ответ

1 голос
/ 12 апреля 2011

Читали ли вы в блоге сообщение о Приморском Аясификации и последующих действиях FAQ ? Это, безусловно, самый простой способ вставить AJAX в ваше существующее приложение Seaside (посмотрите последний вопрос в FAQ, чтобы узнать, с чего начать). Поскольку при этом используется обычный механизм обратного вызова Seaside, состояние автоматически синхронизируется.

Если вы хотите увидеть сложный пример того, как можно управлять состоянием сервера и клиентской DOM, взгляните на виджет отчета в виде дерева, который поставляется с пакетом Scriptaculous-Components и реализован в классе SUTreeReport.

В качестве альтернативы вы можете посмотреть Reef . Reef обеспечивает абстракцию низкоуровневого протокола AJAX и автоматизирует обновление компонентов в Seaside.

...