Как встроить динамический код 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}