我在 ajaxifying 我们的新 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-表单输入(见图)来改变树的内容。如果连接暂时不可用,我们还希望保持状态(否则用户的整个状态和字段编辑将丢失并显示 404,后退按钮将导致会话不一致,最坏的情况)。情况更加复杂,因为我们希望允许多个用户的这种行为;当然,每个用户都有不同的树状态(树中的每个节点未加载/展开/折叠)但数据字段中的条目一致的语义。
你有一个模板或最小的例子,可以用它来更新服务器会话吗?