1

我正在尝试使用 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)

4

3 回答 3

2

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

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

看...

资产/javascripts/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') %>" );
于 2012-06-14T14:48:31.263 回答
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 秒按下一次按钮,调用您的远程功能,就好像有人每两秒点击一次该按钮一样。我知道,这不是最干净的方法,但它在紧要关头工作得很好,直到你可以得到更强大的东西为你工作。虽然你可以在技术上使用它。

希望有帮助。

于 2012-06-13T21:15:26.030 回答
0

看看这个问题

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

于 2012-06-13T20:20:42.080 回答