My RoR网站使用fullcalendar
gem实现日历。每个用户都有一个日历,显示他或她正在参加的活动。以下场景为我的问题奠定了基础:
- 用户Alice单击日历上的某个事件,该事件将指向该事件的
show
页面 - Alice单击事件的
show page
上的"无人参与事件"按钮 - 爱丽丝点击后退按钮
- 她刚刚没人管的事情仍然列在她的日程表上
当按下后退按钮时,我如何让浏览器刷新Alice的事件信息,以便只显示她当前正在参加的事件?
我搜索了Stack Overflow,但没有找到一个有效的解决方案。缓存清除,如图所示如何防止Rails中的浏览器页面缓存不起作用。我甚至不确定这是缓存问题。也许有一些javascript会强制重新加载信息?我们非常感谢任何解决方案。谢谢
回复@ElliotRoche:
在视图中单击参与按钮,触发参与操作:
<%= button_to button_text, attend_event_path(@event), :remote => true, :id => "attend" %>
出席操作将与会者从与会者列表中添加/删除,如下所示:
def attend
@event = Event.find(params[:id])
@attendee = User.find(session[:user_id])
if @event.users.exclude?(@attendee)
@event.users << @attendee
@event.save
else
@event.users.delete(@attendee)
end
@attendees = @event.users
respond_to do |format|
format.js
format.html { }
format.json { }
end
end
使用attender.js.erb,与会者列表将使用UJS:进行更新
$('#attendees-list').html("<%= j render(:partial => 'attendees_list', :locals => { :attendees => @attendees }) %>");
从这里开始,当按下后退按钮时,不会反映用户已参加/未参与事件的事实。
尝试在response-to块中添加format.html { redirect_to(@event) }
。
原因是您正在点击后退按钮,页面将带您进入上一页,恢复您离开时的状态。点击后退按钮不会强制页面"重新加载"。您可以配置"返回"按钮,并强制它对您要访问的页面进行重定向或呈现(必要时传递参数)。
HTML5中引入了一些新方法。它可能会有帮助,也可能会解决你的问题,但我不能保证它会,因为我自己没有尝试过。
https://css-tricks.com/using-the-html5-history-api/
祝你好运!