0

说到这个,我是个笨蛋,我完全被困住了。在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()

但是当我单击该链接时,我在控制台中没有收到任何错误,并且消息也没有被删除。

4

1 回答 1

1

我建议你不要模仿那个 Railscast。从 2008 年开始,事情发生了很大变化。在服务器上编写 Javascript 以在客户端执行是过时的;整个JavascriptsController想法对我来说都是令人畏惧的。

相反,您可以让“隐藏此消息”链接在客户端触发 AJAX 请求,告诉服务器停止显示公告,等待success-type 响应,然后删除消息本身。

我做了一个小提琴,显示了这个的基本版本。请注意,它会伪造服务器对 AJAX 请求的响应,但您的应用程序所要做的就是返回一个 HTTP 成功代码。

如果您的应用程序很简单,这就足够了,但最终这些 jQuery 事件会失去控制,并可能需要一个客户端框架(如主干.js)来跟踪事情。

于 2012-05-09T23:11:53.823 回答