在javascript中渲染html.erb模板

时间:2014-09-26 13:01:07

标签: javascript ruby-on-rails

我正在运行rails 4.0.4。我有一个表单,我正在使用一个部分来添加字段的子集。用户可以选择删除这些字段,并在页面上显示其他字段后将其替换。如果他们想要撤消他们的决定,我希望能够重新添加这些字段。

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中吗?

2 个答案:

答案 0 :(得分:1)

你可以试试,

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

无论你传递给render_to_string以上的是该方法的参数。 对于'/ shared',您可能需要也可能不需要'/'。

答案 1 :(得分:0)

如果我理解你的问题,并且部分永远不会改变,你将不需要从服务器获取它。只需将其隐藏在CSS中(例如使用JQuery的$('#selector').hide()

另一方面,如果您需要Ruby在每次用户恢复时自定义部分,您可以从浏览器向服务器发送AJAX请求以请求新版本的部分。

在适当的控制器操作中添加一行,以呈现您的部分:

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

在JavaScript中创建一个合适的XML HTTP请求以获取此部分(例如JQuery的$.ajax()。)

然后使用JavaScript将其添加到适当位置的DOM中。