Rails 3 - DIV的定期刷新

时间:2012-06-13 20:14:03

标签: jquery ruby-on-rails-3 ujs

我正在尝试使用AJAX / Unobtrusive JavaScript / JQuery刷新div的内容。

如果我创建一个“刷新”链接并为其提供数据远程属性,这很容易做到。

但是,我想使用setInterval函数每2秒刷新一次,而不是使用链接。

此代码应该展示我正在尝试做的事情。放入application.js时它不起作用,因为ERB没有被评估,但希望它能解释我的目标。

  setInterval(function(){
    $("#scuttlebutt").html("<%= escape_javascript(render 'scuttlebutt') %>");
  },2000);

在Rails 3中执行此操作的正确方法是什么?

(我正在使用Rails 3.2.5)

3 个答案:

答案 0 :(得分:2)

好的,我知道你要做什么。我以前做过这个,我发现了一个简单的方法。

您希望仍然在控制器中调用远程方法的按钮,该控制器在浏览器中执行一些javascript以刷新该DIV。我知道,我知道,你不想拥有它,但我在这里。我的页面上有一个,但我把它隐藏在一边,以便没有人能找到它,链接这个:

:id => "refresh_button", :style => "position: absolute; left: -9999px" // Rails ERB notation

然后,我将其添加到同一个文件中,我认为该文件是.html.erb文件。

<script type="text/javascript">
  function doSomething() {
    $('#refresh-button').click();
  }

  setInterval('doSomething()',2000);
</script>

这将每2秒按一次按钮,调用您的遥控器功能,好像有人每两秒钟点击一次该按钮。我知道,这并不是最干净的方式,但是它可以在紧要关头工作,直到你能为你提供更强大的功能。虽然你可以在技术上使用它。

希望有所帮助。

答案 1 :(得分:2)

我最终将代码放在application.js中:

  • 检查div是否存在
  • 使用setInterval
  • 制作计时器
  • 从当前URL的Rails请求一个js脚本,这将导致评估js​​.erb视图文件。当这个文件运行时,它会更新我的div。

...看哪

资产/ Javascript角/ application.js中

$(function() {

  if ($('#scuttlebutt').length) {
    setInterval(function(){
      $.getScript(window.location.pathname, function(data, textStatus, jqxhr) {
        console.log('Load was performed.');
      });
    },2000);
  }

});

视图/车票/ show.js.erb

$("#scuttlebutt").html(" <%= escape_javascript(render 'scuttlebutt') %>" );

答案 2 :(得分:0)

查看this question

它声明.js文件不像.erb文件那样被解析。它们按原样传递。