2011-01-24 3 views
1

私はレールアプリケーションでRubyをビルドしています。 @ shout.content(テキスト属性)というオブジェクトの属性を含むHTMLパーシャルがあります。コントローラシャウトでajaxを使用してjs.jrsファイルをリロードする方法

は - @shout = Shout.last

アイデアは、(それが新しいシャウトであること変更)@shout新しいシャウトが作成されるたびに変化することです。 私は3秒ごとにajaxを使って部分(@ shout.contentを含む)を "リフレッシュ"したいと思います。

私はすべての3秒を繰り返すことになるのJavaScript機能置いて考えた:

page.replace_html('content', render(:partial => 'content', :locals => {:content => @shout.content})) 

:)

setInterval("updateShout()", 3000); 

とupdateShoutを(これを行いますjs.rjsファイルを実行します欠けている部分はupdateShout()関数です。私はjavascriptを使ってjs.rjsファイルを実行する方法を知らない。

javascriptを使用してjs.rjsを実行するにはどうすればよいですか?

おかげで、

オデッド

答えて

0

Prototypeを使用している(表示されている)とすれば、これを大幅に簡略化できます。あなたは適切なURLで/path/to/shouts.jsを置き換えることを確認

new Ajax.PeriodicalUpdater('content', '/path/to/shouts.js', { method: 'get', frequency: 3}); 

:まず、代わりにsetIntervalへお電話の、あなたのページの下部に<script>タグでこれを置きます。詳細は、periodicalUpdaterを参照してください。代わりに、部分的にあなたのRJSの

はその後、あなたが必要とするすべてはあなたのコントローラで次のようである:

respond_to do |format| 
    format.html 
    format.js { render :text => @shout.content } 
end 

これは、システムの最新の叫びのテキストをレンダリングし、それをブラウザに送り返す、残しますあなたのためにcontent div内のテキストを置き換えるPeriodicalUpdater

+0

okですが、shout.jsには何が入りますか? –

+0

あなたはもうshout.jsは必要ありません。 '/ path/to/shouts.js'は単にコントローラの' respond_to'ブロックを持つ関数にマップされるURLです。 –

-1

あなただけのAJAXリクエストを作成火災、あなたはjqueryのを使用しているパーシャルを呼び出し、レコードをフェッチするためにAJAXのクエリを発射する必要があり、かつrequirement.IfごとにUIを設定されていますjs.erbファイルを開き、必要なHTMLを生成するパーシャルを呼び出します。リクエストが成功すると、DOM要素が更新されます。

$.ajax({ 
     type: "GET", 
     url: "<%= url %>" 
    success: function(html){ 
      $("#content").html(html); 
     } 
    }); 
+0

彼はJQueryの代わりにPrototypeを使用しているようです... –

関連する問題