如果在调用renderContenOn:
后如何更新网页内容?由于页面已经呈现,但是当用户点击提交按钮时,我有一个回调,我需要更新同一页面。
感谢。
答案 0 :(得分:4)
实际上,除非您特别想要就地更新,否则您无需执行任何操作。 Seaside在执行动作回调后自动重新呈现页面。请查看online seaside book的基础章节。它很好地解释了Seaside渲染的工作原理以及处理动作回调后会发生什么。
如果您需要更复杂的更新行为(例如,使用ajax),您可以使用包含的jQuery-Ajax绑定。
答案 1 :(得分:3)
如果停留在同一页面上至关重要,您可能希望使用其中一个JavaScript库,例如jQuery绑定。
使用AJAX
如果您下载或安装了Seaside for Pharo或Squeak,您可以找到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:
。