Railcasts 103 - 从Prototype转换为Jquery,需要帮助

时间:2012-05-09 22:01:52

标签: jquery ruby-on-rails-3 prototypejs ujs

当谈到这一点时,我是个笨蛋而且我完全陷入困境。在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()

但是当我点击链接时,我在控制台中没有出现任何错误,并且没有删除该消息。

1 个答案:

答案 0 :(得分:1)

我建议你不要模仿Railscast。从2008年开始,事情发生了很大的变化。在服务器上编写Javascript以便在客户端上执行是过时的;整个JavascriptsController的想法让我感到畏缩。

相反,您可以让“隐藏此消息”链接在客户端触发AJAX请求,告知服务器停止显示通知,等待success类型响应,并删除消息本身

我做了fiddle,显示了这个的基本版本。请注意,它会假定服务器对AJAX请求的响应,但您的所有应用程序都必须返回HTTP成功代码。

如果您的应用程序很简单,这就足够了,但最终这些jQuery事件无法控制,并且可能需要像backbone.js这样的客户端框架来跟踪事物。