1

我希望能够使用一些 rails 的视图和表单助手,例如<%= image_tag .. %><%= select_tag .. %>在我的 javascript 模板中。我读了这个线程,该线程建议将 erb 预渲染为某个 javascript 变量中的字符串,然后从模板中调用它(它必须在调用 js 模板之前可用)。所以我可以做这样的事情:

view_helpers.js.erb

<script type="text/javascript">
  var ViewHelpers = {
      CountrySelect: "<%= select_tag "person[country_id]", options_from_collection_for_select(Country.all, "name", "id"), :prompt => '-Country-' %>"
  };
</script>

然后从我的生态模板中调用它(稍后渲染):

edit_person.jst.eco

...
<p>
  <label for="person_country_id">Country</label>
  <%= ViewHelpers.CountrySelect %>
</p>
...

但是,我似乎无法将其加载为视图的一部分或使用资产管道:

资产管道:application.js

(保存在 app/assets/javascripts/views/people/view_helpers.js.erb 中)

//= require ./views/people/view_helpers

或者

ERB 模板:views/people/index.html.erb

(保存在 app/views/people/view_helpers.js.erb 中)

<%= render :template => 'people/view_helpers' %>

我是完全错误地处理这个问题还是我错过了什么?谢谢。

4

1 回答 1

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 %>
于 2012-11-13T12:42:11.080 回答