Как вставить динамический код Ruby в раздел "javascript" в шаблонах Slim?
Один из способов:
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};
}
Есть ли для этого лучшие решения?
Ответы
Ответ 1
что я предпочитаю делать, заключается в том, чтобы сохранить все 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
Ответ 2
В Slim
javascript:
var all_product_ids = "#{existing_ids.to_json}";
var products_json = "#{@filter.data.to_json}";
Ответ 3
javascript:
var all_product_ids = #{raw existing_ids.to_json};
var products_json = #{raw @filter.data.to_json};
Ответ 4
От https://github.com/slim-template/slim
Пункт интерполяции текста
SLIM вытесняет HTML по умолчанию.
Чтобы избежать такого же использования # {{content}} для # {content}
Ответ 5
У меня была аналогичная проблема с этим. Использование кода, который предоставили другие, не работает для меня, потому что slim был html, избегая моей переменной. Я закончил использование Gon. Это для Синатры, но у них есть драгоценный камень для Rails. Надеюсь, что это поможет другим, имеющим схожие проблемы.
Ответ 6
создать _your_erb_file_contain_javascript_code.erb
первый
И затем в вашем тонком файле javascript:
part:
#{ conditions ? (render 'your_erb_file_contain_javascript_code') : nil}
Ответ 7
javascript:
var isAdmin = "#{current_user.admin? ? 1 : 0}";