2014-09-26 76 views
0

我正在運行rails 4.0.4。我有一個表單,我使用partial來添加一個字段子集。用戶可以選擇刪除這些字段,並在頁面上將其替換爲其他字段。我希望能夠在他們想撤銷其決定的情況下重新添加這些字段。在javascript中渲染html.erb模板

渲染在JavaScript文件中不可用(js.erb文件看起來很奇怪)。我已經儘可能使用以下內容將文件的文本讀入一個變量。

var master_quantity = "<%= data='';File.open("#{Rails.root}/app/views/shared/_a2a_master_quantity.html.erb","r").each_line{|x| data+=x};data %>"; 

可惜escape_javascript不會出現要在asests可用任一文件夾,所以我不能,因爲它打破了JavaScript才能使用此字符串。

任何人有任何關於清理字符串或替代方法來獲得部分到我的JavaScript的建議?上述

+0

我不確定這個問題是否重複,但這些答案看起來有關。 [在JavaScript中渲染一個html.erb](http://stackoverflow.com/questions/9617658/rendering-a-html-erb-in-rails-with-javascript) – dcorking 2014-09-27 12:15:55

回答

1

你可以試試,

controller = ActionController::Base.new 
controller.send(:render_to_string, '/shared/a2a_master_quantity') 

無論你傳遞給render_to_string是該方法PARAMS。 您可能需要也可能不需要那個領先的'/'作爲'/ shared'。

+0

這似乎與開放相同的問題一個File對象直接,這是我可以得到的字符串,但我仍然無法逃脫它。 – biagidp 2014-09-29 12:12:28

+0

我發現了一篇文章,解釋瞭如何在資源文件(如javascript)中使用escape_javascript。通過包括ActionView :: Helpers :: JavaScriptHelper這個解決方案或我的原始解決方案通過File.open工作。 http://stackoverflow.com/questions/6838550/how-do-i-get-escape-javascript-and-other-helpers-in-my-sprockets-pre-processed-j – biagidp 2014-09-29 12:17:03

0

如果我理解你的問題,而部分決不會改變,你就不需要從服務器獲取它。只需把它藏在CSS(如使用jQuery的$('#selector').hide()

在另一方面,如果你需要紅寶石您的部分用戶恢復它每一次定製,你可以從瀏覽器發送一個AJAX請求到服務器,以請求部分的新版本。

中添加一行呈現一個合適的控制器操作的部分:

render :partial => 'a2a_master_quantity' and return if request.xhr? 

請在你的JavaScript合適的XML HTTP請求到得到這個部分(如jQuery的$.ajax()。)

然後使用JavaScript將其添加到適當位置的DOM中。

+1

因爲它有表單字段我希望他們從DOM中刪除,所以他們從來沒有打到後端。隱藏它們並將它們設置爲空字符串應該足夠了,它讓我感到很難過,因爲沒有辦法做到這一點。 – biagidp 2014-09-26 18:49:54

+0

如果我正確理解您的評論,則希望在用戶查看頁面時從文檔中刪除並添加內容。這不能在瀏覽器中用Ruby來完成,除非你使用Opal之類的東西,這就是爲什麼ERB中沒有「渲染」的原因。 ERB無法做到這一點,因爲它在將文件發送到瀏覽器之前創建了所有的JavaScript。相反,只需在JavaScript的DOM中讀寫'innerHTML'屬性即可。但也許我不明白你的問題。 – dcorking 2014-09-27 11:19:36

+0

你似乎正確理解。我所在的頁面以空白布局開始,您可以在其中添加和刪除元素。我試圖使用相同的部分來構建js文件中的初始頁面和html代碼片段,以便在刪除所有元素時使用它們。我的印象是js.erb文件先解釋嵌入的ruby,然後提供javascript文件。我只是希望使用預先存在的ruby partial作爲字符串來構建javascript中的html,因爲它不會在客戶端進行更改。 – biagidp 2014-09-29 11:55:19