2011-08-26 46 views
0

我有一个场景,我需要在新窗口中显示窗体预览。来自javascript的通话轨道动作

我被困在如何从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: 

我能够发布使用.post的$( '/ URL')从jQuery的数据。但是,该视图并未呈现。我可以看到视图正在被调用(调试命中断点),但浏览器不显示它。有什么我需要做的.post()方法路由到新的网址?

+0

您必须在Rails中设置与预览操作相对应的路径,并在show_form()中对其进行AJAX调用。 – cmpolis

+0

我可以使用jquery的$ .post('/ url')发布数据。 – truthSeekr

回答

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 
}); 

EDIT(再次):

只是重读你的问题。似乎你试图在一个新窗口中呈现所有内容?假设您的视图呈现整个HTML块(使用DOCTYPE和<html>),则可以使用window.open并只指定URL。在这种情况下,你根本不需要AJAX。

+0

谢谢。帖子似乎可以成功发布,但视图不会呈现。我会用细节更新我的问题。谢谢。 – truthSeekr

+1

请参阅上面的编辑。 –

+0

感谢您的帮助 – truthSeekr