我在rails应用程序上构建ruby。 我有html partial包含一个对象的属性 - @ shout.content(text attribute)。
在控制器中,Shout是 - @shout = Shout.last
这个想法是@shout每次创建一个新的喊叫时都会改变(它会变成新的喊叫)。 我希望每隔3秒,部分(包含@ shout.content)将使用ajax“刷新”。
我想把JavaScript函数每隔3秒重复一次:
setInterval( "updateShout()", 3000 );
updateShout()将运行一个js.rjs文件来执行此操作:
page.replace_html('content', render(:partial => 'content', :locals => {:content => @shout.content}))
缺少的部分是updateShout()函数。我不知道如何使用javascript执行js.rjs文件。
你知道如何使用javascript执行js.rjs吗?
谢谢,
乌迪德
答案 0 :(得分:0)
鉴于您(似乎)正在使用Prototype,您可以大大简化这一过程。首先,不要打电话给setInterval
,而是将其放在页面底部的<script>
标记中:
new Ajax.PeriodicalUpdater('content', '/path/to/shouts.js', { method: 'get', frequency: 3});
确保使用适当的网址替换/path/to/shouts.js
。有关详细信息,请参阅periodicalUpdater
。
然后,您需要的只是控制器中的以下内容,而不是您的RJS部分:
respond_to do |format|
format.html
format.js { render :text => @shout.content }
end
这将在系统中呈现最新喊叫的文本并将其发送回浏览器,让PeriodicalUpdater替换content
div中的文本。
答案 1 :(得分:-1)
你只是在调用partials,你需要触发一个AJAX查询来获取记录,并根据需要设置ui。如果你正在使用jquery然后激活AJAX请求创建js.erb文件并调用你将生成所需的部分HTML,成功请求时只需更新您的DOM元素。
$.ajax({
type: "GET",
url: "<%= url %>"
success: function(html){
$("#content").html(html);
}
});