borrowing periodically_call_remote (and update_page!!) for an in-page timer


The following is either a FAQ, a clever code snippet, a plea for help, or a candidate for simplification, depending on the reaction it generates.

Guess what this does:

  <span id='abuse_me' style='background-color: orange;'>     whip me beat me <br/>     make me install oracle   </span>

  <%= periodically_call_remote(         :frequency => 5,               :with => 'new Effect.Shake("abuse_me")'         )   %>

It bypasses Ajax, doesn't call remote, it simply creates a timer that shakes our SPAN (not DIV!) every five minutes. (Those of us who don't want our websites to look like the cheapest of untargeted web ads may think of an action better than shaking!)

Question: Is this actually more portable, robust, whatever, than calling a lowly setTimeout()? At least I don't need to reset it. Are there any other benefits?

(Technical question: Is a better method than :with available to call the timed method?)

Now try this:

  <%= periodically_call_remote(         :frequency => 5,              :with => 'shakes()'         )   %>

<script>   function shakes() {   <%=     update_page do |page|       page.visual_effect :shake, 'abuse_me'     end   %>   } </script>

Oookay. Now I reach out to RJS for the JavaScript. If the contents of shakes() were, again, more useful, then I might need them to be more browser-neutral. I am tired of writing raw JavaScript from scratch and then letting my various browsers vote on it. Thats what did for us! (Right?)

(And how much of the <script> tags and function shakes() {} lines could I have pushed inside that render :update?

Is this technique an awesome discovery of mine? Or have I gone astray and need simplifying??