我有一个场景需要在新窗口中显示表单预览。
我被困在如何从javascript函数调用rails动作预览以及如何为该动作启动新窗口。
以下是代码:
click preview link code:
<%= link_to_function "#{image_tag('preview.png', :alt=>'Preview', :title=>'See a preview')}
<span class='text'>Preview</span>",
"javascript:show_form()" %>
javascript function:
function show_form() {
//grab the dom
var html = $('#newform').clone();
//whats next here?????
}
rails action:
def preview
@html = params[:html]
end
我的问题是:
感谢您的帮助
Edit:
我可以使用来自jquery的$ .post('/ url')发布数据。但是,视图未呈现。我可以看到正在调用视图(调试命中断点)但浏览器不会渲染它。在.post()方法中我需要做什么来路由到新的URL吗?
答案 0 :(得分:3)
由于你正在使用jQuery,你也可以使用它的AJAX库:http://api.jquery.com/category/ajax/
在大多数情况下,使用$.get()
或$.post()
就足够了。您可以使用$.ajax()
获得更大的灵活性,但必须输入更多选项。
基本上,您的目标是调用映射到相应控制器操作的URL。该操作应返回具有适当HTML,XML或JSON的视图。如果它只返回表单的HTML,您可以在结果上使用jQuery来获取适当的值并执行您需要的操作。
修改
AJAX调用采用成功的回调函数,您可以提供实际渲染表单。
示例:
$.post('/url', function (data) {
$('#myForm').html(data); // this would simply inject the returned HTML into the form
});
编辑(再次):
重新阅读您的问题。似乎你试图在新窗口中呈现所有内容?假设您的视图呈现整个HTML块(使用DOCTYPE和<html>
),您可以使用window.open
并指定URL。在这种情况下,您根本不需要AJAX。