我希望能够在我的javascript模板中使用一些rails的视图并形成帮助,例如<%= image_tag .. %>
或<%= select_tag .. %>
。我读了this thread,建议将erb预渲染为某个javascript变量中的字符串,然后从模板中调用它(它必须在调用js模板之前可用)。所以我可以这样做:
<script type="text/javascript">
var ViewHelpers = {
CountrySelect: "<%= select_tag "person[country_id]", options_from_collection_for_select(Country.all, "name", "id"), :prompt => '-Country-' %>"
};
</script>
然后从我的eco模板中调用它(稍后再现):
...
<p>
<label for="person_country_id">Country</label>
<%= ViewHelpers.CountrySelect %>
</p>
...
但是,我似乎无法将其作为视图的一部分或使用资产管道加载:
(保存在app / assets / javascripts / views / people / view_helpers.js.erb)
//= require ./views/people/view_helpers
(保存在app / views / people / view_helpers.js.erb中)
<%= render :template => 'people/view_helpers' %>
我是否完全错误地解决了这个问题,或者我错过了什么?感谢。
答案 0 :(得分:1)
是的,这是可能的。你甚至可以将它用于部分:
update_js.js.erb:
$('#element').html('<%= escape_javascript(render(:partial => @partial, :locals => {:my_var => @item })) %>');
在控制器中你应该有格式js
:
respond_to do |format|
format.js do
render :update_js do |page|
page.replace_html "element", :partial => @partial
end
end
end
如果您想通过AJAX调用此js,只需将:remote => true
传递给您的链接
<%= link_to 'replace content', item_path(@item), :remote => true %>