如何使facebox弹出窗口保持打开状态,并且提交后facebox内的内容会发生变化

时间:2010-04-17 15:38:11

标签: ruby-on-rails jquery-plugins jquery facebox

我是一个jQuery总 n00b 。 在我的rails app中发生了什么:

我在主页上,点击此链接:

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

一个漂亮的facebox弹出窗口显示并呈现此视图和包含的表单:

# /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

现在我想渲染那个页面INSIDE SAME弹出窗口包含表单,按下提交按钮但我没有IDEA怎么做。我试过了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未定义”错误。这意味着什么?

1 个答案:

答案 0 :(得分:0)

你可以继续使用facebox_render或其中一个分叉,它会让一切变得更容易:)

关于您的问题,您需要的是facebox中的表单以发出AJAX请求,以便您可以使用format.js来响应此调用。因此,在这种情况下,您需要form_remote_tag使用AJAX发布数据。

在控制器中,您将收到一个AJAX请求,您将使用respond_to.js处理它,然后您可以再次创建一个render_to_facebox。现在,您将在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

我希望它有点帮助,ciao!