一方通行:
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};
}
これのためのより良い解決策はありますか?
私が好むのは、すべての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
スリムで
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};
From https://github.com/slim-template/slim テキスト補間段落
SLIMはデフォルトでHTMLをエスケープします。同じ使用を避けるには、#{{content}}for#{content}
これについても同様の問題がありました。他の人が提供したコードを使用してもうまくいきませんでした。slimが変数をhtmlからエスケープしていたためです。私は Gon を使用してしまいました。これはシナトラ用ですが、Rails)用の宝石もあります。同様の問題を抱えている他の人に役立つことを願っています。
_your_erb_file_contain_javascript_code.erb
最初
そして、あなたのスリムファイルjavascript:
パート:
#{ conditions ? (render 'your_erb_file_contain_javascript_code') : nil}
javascript:
var isAdmin = "#{current_user.admin? ? 1 : 0}";