Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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}";