1

我是一个 jQuery 总n00b。在我的 Rails 应用程序中会发生以下情况:

我在主页上,我点击这个链接:

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

一个漂亮的 Facebook 弹出窗口显示并渲染此视图和包含表单:

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

现在我想在按下提交按钮后,在 SAME 弹出窗口中呈现该页面,但我不知道该怎么做。我试过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 或者它的一个分支,它会让一切变得更容易:)

关于您的问题,您需要的是 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!

于 2010-04-18T10:58:19.733 回答