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タイプの応答を待って、メッセージ自体を削除することができます。

これの基本的なバージョンを示すフィドルを作成しました。これは AJAX 要求に対するサーバーの応答を偽造するものですが、アプリケーションが行う必要があるのは、HTTP 成功コードを返すことだけです。

アプリケーションが単純な場合はこれで十分ですが、最終的にはこれらの jQuery イベントが制御不能になり、backbone.js などのクライアント側フレームワークを呼び出して追跡する必要が生じる可能性があります。

于 2012-05-09T23:11:53.823 に答える