当谈到这一点时,我是个笨蛋而且我完全陷入困境。在railscast 103之后,我正在尝试使用rails 3.2.3实现公告系统
本教程使用原型,我不知道如何将其转换为jquery。
在我的application.html.haml
我有这个:
%h3{:id => "alert", :class=>'alert-danger fade in', :style=>"padding: 10px;"}
- unless current_announcements.empty?
#announcement
- for announcement in current_announcements
%ul{:class=>'unstyled'}
%li
= h announcement.message
= link_to "Hide this message", :url => "/javascripts/hide_announcement.js"#, :remote => true
单击隐藏按钮应该删除视图,同时将announcement_hide_time
设置为当前时间。我在我的javascript控制器中有这个:
class JavascriptsController < ApplicationController
respond_to :js
attr_accessible :announcement_hide_time
def hide_announcement
session[:announcement_hide_time] = Time.now
end
end
这在我的路线中:
match ":controller/:action.:format"
现在的问题是在railscast中,它说我需要hide_announcement.js.rjs中的以下内容
page[:announcement].hide
我在hide_announcement.js.erb中将其替换为:
$("#announcement").hide()
但是当我点击链接时,我在控制台中没有出现任何错误,并且没有删除该消息。
答案 0 :(得分:1)
我建议你不要模仿Railscast。从2008年开始,事情发生了很大的变化。在服务器上编写Javascript以便在客户端上执行是过时的;整个JavascriptsController
的想法让我感到畏缩。
相反,您可以让“隐藏此消息”链接在客户端触发AJAX请求,告知服务器停止显示通知,等待success
类型响应,并删除消息本身
我做了fiddle,显示了这个的基本版本。请注意,它会假定服务器对AJAX请求的响应,但您的所有应用程序都必须返回HTTP成功代码。
如果您的应用程序很简单,这就足够了,但最终这些jQuery事件无法控制,并且可能需要像backbone.js这样的客户端框架来跟踪事物。