一旦renderContenOn:在smalltalk中更新页面的内容

时间:2013-04-11 23:01:25

标签: smalltalk seaside

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

感谢。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

如果停留在同一页面上至关重要,您可能希望使用其中一个JavaScript库,例如jQuery绑定。

使用AJAX

如果您下载或安装了Seaside for Pharo或Squeak,您可以找到jQuery示例 在你的形象。使用标准端口时,请在http://localhost:8080/javascript/jqueryhttp://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: