【发布时间】:2014-01-28 17:26:19
【问题描述】:
我正在编写一个 Rails 4.0.2 应用程序,并试图在 AJAX 事件后在我的视图中显示一个 Flash 通知。
在我看来,我会显示一个日历,其中包含用户可以点击的日期。当他们这样做时,我通过 onclick 事件处理程序触发 AJAX 事件,该事件处理程序更新我的模型,添加或删除记录。触发事件后,我完成了页面刷新以显示更新的结果。
我发现我必须在 JS 点击事件期间进行页面刷新,才能正确更新视图。仅在控制器中进行重定向或渲染是不够的。
因此,为此,我在控制器中设置了 Flash 通知...
def set_conflicts
@conflict = @member.conflicts.for_date(params[:date]).first
if @conflict
@conflict.destroy
else
conflict_date = Date.parse(params[:date])
unless Conflict.create(
month: conflict_date.month,
day: conflict_date.day,
year: conflict_date.year,
member: @member
)
flash[:alert] = 'Oops, there was a problem updating conflicts'
end
end
flash[:notice] = 'This is a test!'
redirect_to manage_member_conflicts_path(@member)
end
...并在我的 application.haml...
中包含以下 Flash 显示逻辑...
%body
= p flash.inspect
- flash.each do |type, message|
= content_tag(:div, message, :class => "flash-#{type}")
= render 'devise/menu/login_items'
= yield
注意:我在视图中使用 HAML 而不是 ERB
然而,无论我尝试什么,Flash 消息都不会显示。其他一切都按预期工作除了 flash message,我无法弄清楚为什么。
我怀疑这与我正在做的 AJAX 刷新与重定向(甚至可能是 turbolinks)有关,但我已经在 SO 上查看了其他答案,但根本无法让它工作。显然,我错过了一些东西。
这是 JS 点击处理程序(非常简单):
window.calendarClick = (eventDate, linkURL) ->
event = $(document.getElementById(eventDate))
event.toggleClass('selected')
# Set or Remove conflicts
$.ajax
url: linkURL
data:
date: eventDate
# Refresh the page
$.ajax
url: '',
context: document.body,
success: (s,x) ->
$(this).html(s)
【问题讨论】:
标签: javascript ruby-on-rails ajax ruby-on-rails-4 rails-flash