Ruby on rails RubyonRails中表单提交后刷新DIV
我有一个控制器和一个视图(这个没有ActiveRecord)。控制器计算世界上几个地方的当前时间,视图显示这些时间 我想添加一个按钮,使时钟更新。添加一个刷新整个页面的常规按钮可以很好地工作,但我希望使用AJAX异步完成这项工作。 我试着使用Ruby on rails RubyonRails中表单提交后刷新DIV,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个控制器和一个视图(这个没有ActiveRecord)。控制器计算世界上几个地方的当前时间,视图显示这些时间 我想添加一个按钮,使时钟更新。添加一个刷新整个页面的常规按钮可以很好地工作,但我希望使用AJAX异步完成这项工作。 我试着使用表单远程标记,但是什么都没有发生,因为没有刷新任何内容 我该怎么做 (顺便说一句,我这样做是为了学习rails。没有真正的需要或要求) 我的代码: 控制器有趣的部分: def index utc_time = Time.now.getutc @clo
表单远程标记
,但是什么都没有发生,因为没有刷新任何内容
我该怎么做
(顺便说一句,我这样做是为了学习rails。没有真正的需要或要求)
我的代码:
控制器有趣的部分:
def index
utc_time = Time.now.getutc
@clocks = []
@clocks << ["USA - New York", utc_time - 60*60*5]
@clocks << ["England - London", utc_time]
end
<%= javascript_include_tag 'prototype' %>
<div id="clocks_div">
<% @clocks.each do |city, time| %>
<b><%=h city %></b>: <%=h get_formatted_time(time) %>
<br/>
<% end %>
</div>
<br/>
<% form_remote_tag do %>
<%= submit_tag "Refresh!" %>
<% end %>
def索引
utc_time=time.now.getutc
@时钟=[]
@时钟我认为您必须将要更新的div的名称和要使用的操作/控制器传递到form\u remote\u view。
试着这样做:
<% unless params.has_key? "refresh" %>
<% form_remote_tag :update => "clocks_div", :url => { :action => :index } do %>
<%= hidden_field_tag 'refresh' %>
<%= submit_tag "Refresh!" %>
<% end %>
<% end %>
“clocks_div”,:url=>{:action=>:index}do%>
注意:虽然这应该可以工作,但将clocks\u div的模板移动到a中并通过单独的操作进行渲染可能会很方便我认为您必须将要更新的div的名称和要使用的操作/控制器传递到form\u remote\u view。
试着这样做:
<% unless params.has_key? "refresh" %>
<% form_remote_tag :update => "clocks_div", :url => { :action => :index } do %>
<%= hidden_field_tag 'refresh' %>
<%= submit_tag "Refresh!" %>
<% end %>
<% end %>
“clocks_div”,:url=>{:action=>:index}do%>
注意:尽管这应该可以工作,但将clocks\u div的模板移动到a中并通过单独的操作进行渲染可能会很方便将clocks\u div的内容移动到它自己的部分(而不是div本身)。然后在索引页面中,您可以使用链接到远程、按钮到远程,甚至定期调用远程来更新div
因此:
“clocks\u div”,:url=>{:action=>:refresh}%>
或
{:action=>:refresh},:update=>“clocks\u div”%>
然后在控制器中执行如下操作:(我在这里添加了一些重构)
def get_时钟
utc_time=time.now.getutc
时钟=[]
时钟错误,:locals=>{:clocks=>get_clocks}
#使用时钟值仅渲染部分时钟
结束
将时钟div的内容移动到它自己的部分(而不是div本身)。然后在索引页面中,您可以使用链接到远程、按钮到远程,甚至定期调用远程来更新div
因此:
“clocks\u div”,:url=>{:action=>:refresh}%>
或
{:action=>:refresh},:update=>“clocks\u div”%>
然后在控制器中执行如下操作:(我在这里添加了一些重构)
def get_时钟
utc_time=time.now.getutc
时钟=[]
时钟错误,:locals=>{:clocks=>get_clocks}
#使用时钟值仅渲染部分时钟
结束
如果您不希望视图端更新,您可以通过渲染更新从操作端执行更新
例如
渲染:更新do |页面|
页面[:clocks\u div].innerHTML=render:partial=>“控件/标记列表”
结束如果您不希望视图端更新,您可以通过渲染更新从操作端执行此操作
例如
渲染:更新do |页面|
页面[:clocks\u div].innerHTML=render:partial=>“控件/标记列表”
结束
<%= button_to_remote "Refresh", :url => { :action => :refresh }, :update => "clocks_div" %>
def get_clocks
utc_time = Time.now.getutc
clocks = []
clocks << ["USA - New York", utc_time - 60*60*5]
clocks << ["England - London", utc_time]
clocks
end
private :get_clocks
def index
@clocks = get_clocks
# Renders the full index page by default
end
def refresh
render :partial => "clocks", :layout => false, :locals => { :clocks => get_clocks }
# Renders only the clocks partial with the clock values
end