我在麻烦我们新的Seaside-App时遇到了麻烦。该应用程序的目标是在级联视图中显示合同数据(在概念中像树,但在视觉上只是组件内部的组件):在顶层,合同的名称,点击它们显示所谓的“集合”这些合同包含,点击那些显示它们包含的所谓“部分”等等。
在草稿版本中,我们只是将所有信息加载到客户端,然后使用:
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-inputs(见图)改变树的内容。如果连接暂时不可用,我们还希望保持状态(否则,用户的整个状态和字段编辑将丢失并显示404,后退按钮将导致会话不一致,最坏情况)。情况进一步复杂化,因为我们希望允许多个用户使用此行为;当然,语义是每个用户都有不同的树状态(树中的每个节点都没有加载/展开/折叠),而是数据字段中的一致条目。
你有一个模板或最小的例子,可以用这种方式更新服务器会话吗?
答案 0 :(得分:1)
您是否阅读了有关Seaside Ajaxification和后续FAQ的博文?这当然是将AJAX引入现有Seaside应用程序的最简单方法(查看常见问题解答中的最后一个问题,了解如何开始)。由于这使用正常的Seaside回调机制状态自动保持同步。
如果您想查看有关如何管理服务器状态和客户端DOM的复杂示例,请查看包Scriptaculous-Components
附带的树报告窗口小部件,并在类{{1}中实现}。
或者,您可能希望查看Reef。 Reef提供了对低级AJAX协议的抽象,并自动更新了Seaside中的组件。