【问题标题】:How to render js.erb file in a string for Rails 3.2?如何在 Rails 3.2 的字符串中呈现 js.erb 文件?
【发布时间】:2014-11-03 18:00:15
【问题描述】:

这是 Rails 3.2 应用程序的代码 new.js.erb 文件:

<% if params[:order][:field_changed] == 'quote_id' && @digi_keys.present? %>
  <% @quote_ids.each_with_index do |v, i| %>
    <% quote = PurchaseOrderx.quote_class.find_by_id(v)%>
    <% if quote %>
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_name').val("<%=quote.product_name%>");
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_spec').val('<%=quote.product_spec%>');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit_price').val('<%=quote.unit_price%>');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit').val('<%=quote.unit%>');      
    <% else %>
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_name').val('');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_spec').val('');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit_price').val('');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit').val('');
    <% end %> 
    $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_qty').val('');
    $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_item_note').val(''); 
    $('#order_po_total').val('');  
  <% end %>
  $('#order_field_changed').val('');
<% end %>

我们要做的是将上面的代码保存到js_erb_code的字符串中并渲染它。由于 js_erb_code 将 jquery/javascript 和 erb 代码混合在一起,我们不确定应该在 new.js.erb 中使用哪个渲染选项?

<% render inline: js_erb_code %>

或者

<% render js: js_erb_code %>

或者这种编码方式有问题吗?

【问题讨论】:

  • 你在问how to render a partial from js.erb file 吗?
  • 你的代码很难阅读,而且看起来很丑。您应该在控制器中使用这些 if else 语句,而不是在您的 js 文件中。只需根据您的代码呈现不同的文件
  • @@mohameddiaa27,是的,是关于如何渲染的。

标签: jquery ruby-on-rails ruby-on-rails-3 erb


【解决方案1】:

是的,只要您不混入 html,您的 js.erb 应该可以正常工作。你可以用它把它变成一个字符串:

erb  = ERB.new("js_erb_code")
render erb.result

【讨论】:

  • @@isaacsloan, js_erb_code 是保存 erb 视图代码的字符串变量。 js_erb_code 是否需要在 ERB.new() 中加引号和不加引号?
  • 这是有效的代码:render inline: ERB.new(@js_erb_code).result(binding)
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多