【问题标题】:Timer callback in Pharo smalltalk + SeasidePharo smalltalk + Seaside 中的定时器回调
【发布时间】:2015-11-29 14:34:02
【问题描述】:

我刚刚将我的 Dolphin Smalltalk + Seaside 应用程序移植到了最新的 Pharo Smalltalk 4.0 和 Seaside 3.1。在其中,我需要每秒从(浏览器)客户端到(Pharo)服务器的回调来更新视图。

我有这段代码可以每秒自动按下“更新”按钮。但是在移植到Pharo之后它就不再起作用了:

html script: (
    ( html jQuery: '#updateButton' ) 
        call: 'click';
        interval: 1000 ).

我在网上搜索了其他(更优雅的?)解决方案,但似乎无法让它们发挥作用。谁能给我提示如何进行?

这是由上述代码生成的 JavaScript 代码,用于 Dolphin + Seaside:

<script type="text/javascript">
/*
<![CDATA[/setInterval(function(){$("#updateButton").cl‌​ick()},2000)/]]>
*/</script> 

【问题讨论】:

  • 你能分享一下为什么“它不起作用”吗?您在浏览器或服务器上收到错误吗?
  • @Johan:错误是超时后永远不会调用回调。我通过在 onUpdate 方法中向 Transcript 窗口写入一些东西来测试这一点。当我按下更新按钮时,加上同一个回调,就会出现 Transcript 文本。
  • @Euan M 22:是的,你给我发邮件介绍移植经验。 (但它是一个非常小的应用程序)
  • 顺便说一句:这是上面代码生成的 Javascript,用于在 Dolphin + Seaside 中工作: .... 看起来不错。
  • 您使用的是 Pharo 的哪个发行版和版本?

标签: smalltalk pharo seaside


【解决方案1】:

我想服务器回调附加到 ID 为 #updateButton 的按钮上?奇怪的是,您有一个脚本会触发对该按钮的单击操作,而不是每 xx 秒触发一次回调。

以下脚本将每 10 秒更新一次整个正文。鉴于您实现了正确的渲染方法,这可能是一个更优雅的解决方案:

html script: (
    ((html jQuery: 'body') load
        html: [ :innerHtml | self renderOn: innerHtml ]) 
            interval: 10000)

【讨论】:

  • 嗨@Johan B,这看起来是正确的方向,但给出了错误消息:MessageNotUnderstood: JQueryInstance>>load: 在 JQueryInstance 或其超类中确实没有实现“load:”方法。
  • 还有 PS:我想更新整个视图。不只是一个元素。
  • @FunctionPoint 我修改了代码 sn-p 来修复我的错误(我应该在发布之前在工作区中对其进行评估,对此感到抱歉)。接下来,我还更改了 jQuery 表达式以选择“body”而不是 ID 为 #content 的元素,但这是我无法从您的原始代码帖子中得出的内容。
  • 嗨,Johan,我尝试了您的脚本,但没有任何反应。还尝试了“renderContentOn:iso renderOn:。下面是重新生成的 Javascript。我正在使用 11 月 28 日下载的 Pharo 4.0,并在同一天使用 Metacello 脚本将 SeaSide 3.1 导入到图像中。
  • 我在渲染方法中设置了一个“自我停止”来捕捉所有的事件,但它只有在我手动按下与之耦合的更新按钮时才会被击中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多