调用后如何更新页面的内容renderContenOn:
?由于页面已呈现,但是当用户单击提交按钮时,我有一个回调,我需要更新同一页面。
谢谢。
实际上,除非您特别想就地更新,否则您无需执行任何操作。Seaside 在执行操作回调后会自动重新呈现页面。看看在线海边书籍的基础章节。它很好地解释了 Seaside 渲染的工作原理以及处理操作回调后会发生什么。
如果您需要更复杂的更新行为(例如使用 ajax),您可以使用包含的 jQuery-Ajax 绑定。
如果保持在同一页面上至关重要,您可能希望使用其中一个 JavaScript 库,例如 jQuery 绑定。
使用 AJAX
如果您为 Pharo 或 Squeak 下载或安装了 Seaside,您可以在您的图像中找到 jQuery 示例。使用标准端口时,在http://localhost:8080/javascript/jquery
或处浏览它们。http://localhost:8080/javascript/jquery-ui
其中一个示例是一个简单的 AJAX 组件,它替换或更改当前页面上的内容:
JQAjaxFunctionalTest>> renderContentOn: html
html code id: #logger; with: DateAndTime now.
html paragraph: [
html submitButton
onClick: (html jQuery ajax
script: [ :s | s << (s jQuery: #logger) html: DateAndTime now ]);
with: 'Replace'.
html submitButton
onClick: (html jQuery ajax
script: [ :s | s << (s jQuery: #logger) prepend: DateAndTime now ]);
with: 'Prepend'.
html submitButton
onClick: (html jQuery ajax
script: [ :s | s << (s jQuery: #logger) append: DateAndTime now ]);
with: 'Append' ]
请注意,您需要为您的应用程序配置一个 jQuery 库,例如使用以下命令:
| application |
"your application, eg, when you register it:
application := WAAdmin register: MyRootComponent asApplicationAt: 'myApp'.
"
application preferenceAt: #scriptGeneratorClass put: JQScriptGenerator.
application addLibrary: JQDeploymentLibrary.
这应该足以动态更改当前呈现页面上的内容。
让 Ajaxifier 为您使用 AJAX
Seaside 的 jQuery 绑定带有一个ajaxifier,它将为您将正常调用转换为 ajax 请求,这样您就不需要自己使用 jQuery。
只需将您的应用程序配置为:
| application |
"your application, eg, when you register it:
application := WAAdmin register: MyRootComponent asApplicationAt: 'myApp'.
"
application preferenceAt: #scriptGeneratorClass put: JQScriptGenerator.
application
preferenceAt: #sessionClass put: WAExpirySession;
addLibrary: JQDeploymentLibrary;
addLibrary: JQAjaxifierLibrary/.
并#call:
照常使用。