我是一个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未定义”错误。这意味着什么?
答案 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!