2011-08-26 28 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