2011-06-30 29 views
3

假設我有一個應用程序搜索方法,我想回應AJAX請求。在我的JS視圖(app /視圖/應用/ search.js.erb)我想渲染HTML視圖:Rails以不同的格式呈現動作

$("#content").html(escape_javascript(render(:action => 'search', :format => 'html'))); 
$("#title").html("Title"); 

我知道我可以搬東西到部分並呈現在兩個HTML和JS的意見,但問題是我有很多不同的行動,需要以這種方式迴應,我寧願不創建一堆1行視圖文件,只是呈現部分。

有什麼辦法明確呈現與某個特定格式的行動,並抓住content_for的不同部分呢?因此,對於上述示例,我可以將#title設置爲與content_for:title或其他內容一起返回的HTML。

+0

哪個rails版本是這樣的? – corroded

+0

使用Rails 3.01 – lyricat

+0

你嘗試過這樣的:http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to – corroded

回答

0

我不知道輸出一串HTML到JS源是偉大的設計,但是這不是你的問題 - 我不得不做類似的事情由模板渲染成XML輸出HTML片段,我認爲這更合理:)。

不管怎樣,有你的問題幾件事情。

它從Rails的版本變化,但在Rails 4.x中,我認爲這應該工作,你很接近,但它出於某種原因需要數組爲:formats(複數)。在你的例子中還有一些不相關的東西是不正確的,比如需要ERB <%= tags,並將javascript字符串放入引號中。

var str = "<%= escape_javascript(render(:partial => 'partial_name', :formats => ['html'])) %>"; 

我想。我還沒有嘗試過這一點。

請注意,這仍然是一個部分。你想從另一個模板中渲染一個完整的(而不是部分)模板 - 我很確定Rails不會讓你這樣做。我之前也有點煩人。但事實上,即使是呈現從JS部分的HTML部分(「something.html.erb」),您需要使用:formats => []伎倆,或者Rails將堅持「哎,我想找到一個JS部分與名字,我們是js模式的人!「。

但正如上面應該從JS模板渲染_partial_name.html.erb。這仍然可能不是一個偉大的設計。

希望這會有所幫助。

相關問題