3

调用后如何更新页面的内容renderContenOn:?由于页面已呈现,但是当用户单击提交按钮时,我有一个回调,我需要更新同一页面。

谢谢。

4

2 回答 2

4

实际上,除非您特别想就地更新,否则您无需执行任何操作。Seaside 在执行操作回调后会自动重新呈现页面。看看在线海边书籍的基础章节。它很好地解释了 Seaside 渲染的工作原理以及处理操作回调后会发生什么。

如果您需要更复杂的更新行为(例如使用 ajax),您可以使用包含的 jQuery-Ajax 绑定。

于 2013-04-14T17:44:24.740 回答
3

如果保持在同一页面上至关重要,您可能希望使用其中一个 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:照常使用。

于 2013-04-12T05:56:27.203 回答