1

AJAX / Unobtrusive JavaScript/JQueryを使用してdivのコンテンツを更新しようとしています。

これは、「更新」リンクを作成してデータリモート属性を指定すると簡単に実行できます。

ただし、リンクではなく、setInterval関数を使用して2秒ごとに更新したいと思います。

このコードは、私がやろうとしていることを示しているはずです。ERBが評価されないため、application.jsに入れると機能しませんが、うまくいけば、それが私の目標を説明するでしょう。

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

Rails 3でこれを行う適切な方法は何でしょうか?

(私はRails 3.2.5を使用しています)

4

3 に答える 3

2

わかりました、あなたがやろうとしていることがわかります。私は以前にこれを行ったことがあり、それを行う簡単な方法を見つけました。

それでも、ブラウザでjavascriptを実行してそのDIVを更新するコントローラに、リモートメソッドを呼び出すボタンが必要です。私は知っています、私は知っています、あなたはそれを持ちたくないのですが、ここに私がいます。私は自分のページに1つ持っていますが、誰も見つけられないように横に隠しました。これをリンクしてください。

: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秒ごとにボタンが押され、2秒ごとにそのボタンをクリックしているかのようにリモート関数が呼び出されます。これを行うのに最もクリーンな方法ではありませんが、より堅牢なものが機能するようになるまで、ピンチでうまく機能します。技術的にはこれを使用できますが。

お役に立てば幸いです。

于 2012-06-13T21:15:26.030 に答える
2

私は最終的に次のようなコードをapplication.jsに配置しました。

  • divが存在するかどうかを確認します
  • setIntervalを使用してタイマーを作成します
  • js.erbビューファイルの評価につながる現在のURLでRailsからjsスクリプトをリクエストします。このファイルが実行されると、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 に答える
0

この質問をチェックしてください。

.jsファイルは.erbファイルのように解析されないことを示しています。それらはそのまま渡されます。

于 2012-06-13T20:20:42.080 に答える