2

我在 ajaxifying 我们的新 Seaside-App 时遇到了麻烦。该应用程序的目标是在级联视图中显示合约数据(在概念上类似于树,但在视觉上只是组件内部的组件):在顶层合约名称,单击它们会显示所谓的“集合”这些合同包含,单击它们会显示它们包含的所谓“部分”等等。 显示我们的 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-表单输入(见图)来改变树的内容。如果连接暂时不可用,我们还希望保持状态(否则用户的整个状态和字段编辑将丢失并显示 404,后退按钮将导致会话不一致,最坏的情况)。情况更加复杂,因为我们希望允许多个用户的这种行为;当然,每个用户都有不同的树状态(树中的每个节点未加载/展开/折叠)但数据字段中的条目一致的语义。

你有一个模板或最小的例子,可以用它来更新服务器会话吗?

4

1 回答 1

1

您是否阅读过有关Seaside Ajaxification的博客文章和后续常见问题解答?这无疑是将 AJAX 引入现有 Seaside 应用程序的最简单方法(查看常见问题解答中的最后一个问题以了解如何开始)。由于这使用了正常的 Seaside 回调机制,因此状态会自动保持同步。

如果您想查看如何管理服务器状态和客户端 DOM 的复杂示例,请查看包随附Scriptaculous-Components并在类中实现的树形报告小部件SUTreeReport

或者,您可能想看看Reef。Reef 提供了对低级 AJAX 协议的抽象,并自动更新 Seaside 中的组件。

于 2011-04-11T20:31:20.143 回答