2015-11-29 3 views
4

Я только что портировал приложение Dolphin Smalltalk + Seaside на новейшие Pharo Smalltalk 4.0 и Seaside 3.1. В нем мне требуется обратный вызов каждую секунду от клиента (браузера) до сервера (Pharo) для обновления представления.Таймер обратного вызова в Pharo smalltalk + Seaside

У меня была эта часть кода для автоматического нажатия кнопки «Обновить» каждую секунду. Но это больше не работает после того, как порт для Pharo:

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

Я искал сеть для других (более изящных?) Решений, но не могу показаться, чтобы заставить их работать. Может ли кто-нибудь дать мне подсказку о том, как действовать?

Это код JavaScript, который генерируется кодом выше, и который используется для работы в Dolphin + Море:

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

Можете ли вы поделиться, почему «это не работает»? Вы получаете сообщение об ошибке в браузере или на сервере? –

+0

@Johan: ошибка в том, что обратный вызов никогда не вызывается после таймаута. Я проверил это, написав сообщение в окне Transcript в методе onUpdate. Когда я нажимаю кнопку обновления, связанную с тем же обратным вызовом, появляется текст Transcript. – FunctionPoint

+0

@Euan M 22: Да, вы меня прислали мне о портировании опыта. (Но это очень маленькое приложение) – FunctionPoint

ответ

5

Я полагаю, что обратный вызов сервера привязан к кнопке с идентификатором #updateButton? Странно, что у вас есть скрипт, который запускает действие клика на этой кнопке вместо запуска обратного вызова каждые xx секунд.

Следующий скрипт обновит все тело каждые 10 секунд. Учитывая, что вы реализуете правильные методы рендеринга, это, вероятно, более элегантное решение:

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

Привет @Johan B, который выглядит как правильное направление, но дает сообщение об ошибке: MessageNotUnderstood: JQueryInstance >> load: В действительности нет метода «load:» в JQueryInstance или его суперклассах. – FunctionPoint

+0

И PS: я хочу обновить весь вид. Не только один элемент. – FunctionPoint

+0

@FunctionPoint Я адаптировал фрагмент кода для исправления моей ошибки (я должен был оценить его в рабочей области перед публикацией, извините за это) Затем я также изменил выражение jQuery, чтобы выбрать «тело» вместо элемента с id #content, но это то, что я не могу извлечь из исходного исходного кода. –

Смежные вопросы