Как встроить динамический код Ruby в раздел "javascript" В Slim templates?

одним из способов:

javascript_tag do
  == "var all_product_ids = #{existing_ids.to_json};"
  == "var products_json   = #{@filter.data.to_json};"

или:

= %Q{
var all_product_ids = #{existing_ids.to_json};
var products_json   = #{@filter.data.to_json};
}

есть ли лучшие решения для этого?

7 ответов


что я предпочитаю делать, так это хранить весь javascript в отдельном файле.

например, я бы сделал это следующим образом (jquery):

в макете:

...

<body data-product-ids="<%= existing_ids.to_json %>"
      data-products-json="<%= @filter.data.to_json %>">

.. в js:

// create your application namespace
$.myapp = {};
$.myapp.allProductIds = $.parseJSON( $('body').attr('data-product-ids') );
$.myapp.products = $.parseJSON( $('body').attr('data-products-json') );

Итак, вы будете использовать его в js так:

$.myapp.allProductIds

В Slim

javascript:
  var all_product_ids = "#{existing_ids.to_json}";
  var products_json   = "#{@filter.data.to_json}";

javascript:
  var all_product_ids = #{raw existing_ids.to_json};
  var products_json   = #{raw @filter.data.to_json};

от https://github.com/slim-template/slim Текст интерполяции абзаца

SLIM экранирует HTML по умолчанию. Чтобы избежать того же использования #{{содержание}} на #{content}


У меня была аналогичная проблема с этим. Использование кода, предоставленного другими, не сработало для меня, потому что slim был html, экранирующим мою переменную. В итоге я использовал Гон. Это для Синатры, но у них есть драгоценный камень и для рельсов. Надеюсь, это поможет другим, имеющим подобные проблемы.


создать _your_erb_file_contain_javascript_code.erb первый

а затем в вашем slim файле javascript: детали:

#{ conditions ? (render 'your_erb_file_contain_javascript_code') : nil}

javascript:
  var isAdmin = "#{current_user.admin? ? 1 : 0}";