1

私は jQuery 合計n00bです。私のレールアプリでは、これが起こります:

私はホームページにいます、私はこのリンクをクリックします:

<a href='/betas/new' rel='facebox'>Sign up</a>

美しいフェイスボックス ポップアップが表示され、このビューとそれを含むフォームがレンダリングされます。

# /app/views/invites/new

<% form_tag({ :controller => 'registration_code', :action => 'create' }, :id => 'codeForm') do %>

    <%= text_field_tag :code %>
    <br />
    <%= submit_tag 'Confirm' %>
<% end %>

送信時にチリンと音を立て、コードが有効な場合、ユーザーは別のコントローラーの別のページに移動します。

def create
  # some stuff
  redirect_to :controller => 'users', :action => 'type'
end

送信ボタンが押された後、同じポップアップにフォームが含まれているページをレンダリングしたいと思いますが、その方法はわかりません。私はFaceboxRenderを試しましたが、これは起こります:

元のバージョン:

# /controllers/users_controller
def type
end

そのように変更すると、何も起こりません:

# /controllers/users_controller
def type
  respond_to do |format|
  format.html
  format.js { render_to_facebox }
 end
end

そのように変更すると(間違っていることはわかっていますが、私はn00bなので大丈夫です:-):

# /controllers/users_controller
def type
  respond_to do |format|
  format.html { render_to_facebox }
  format.js
 end
end

私はこれをレンダリングしました:

try {
jQuery.facebox("my raw HTML from users/type.html.erb substituted here")'); throw e }

解決策はありますか?

どうもありがとうございます!!


現在、firebug コンソールから「Ajax が定義されていません」というエラーが表示されます。どういう意味ですか?

4

1 に答える 1

0

facebox_render またはそのフォークの 1 つを引き続き使用できます。これにより、すべてが少し簡単になります :)

あなたの問題について、必要なのはAJAXリクエストを作成するためのfacebox内のフォームです。これにより、format.jsを使用してこの呼び出しに応答できます。したがって、この場合、form_remote_tagAJAX を使用してデータを投稿する必要があります。

コントローラーで AJAX リクエストを受信し、respond_to.js で処理してから、render_to_facebox を再度作成できます。これで、フェイスボックス内に必要なものが表示されます。

ビューで:

# /app/views/invites/new
<% form_remote_tag({ :controller => 'registration_code', :action => 'create' }, :id => 'codeForm') do %>

    <%= text_field_tag :code %>
    <br />
    <%= submit_tag 'Confirm' %>
<% end %>

そしてコントローラーで:

# /controllers/users_controller
def type
  respond_to do |format|
    format.html
    format.js { render_to_facebox }
  end
end

少しでもお役に立てば幸いです、ちゃお!

于 2010-04-18T10:58:19.733 に答える