web-dev-qa-db-ja.com

スリムなテンプレートの「javascript」セクションに動的Rubyコードを埋め込む方法は?

一方通行:

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};
}

これのためのより良い解決策はありますか?

32
wkang

私が好むのは、すべての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
11
Vlad Khomich

スリムで

javascript:
  var all_product_ids = "#{existing_ids.to_json}";
  var products_json   = "#{@filter.data.to_json}";
72
stonean
javascript:
  var all_product_ids = #{raw existing_ids.to_json};
  var products_json   = #{raw @filter.data.to_json};
20
lidaobing

From https://github.com/slim-template/slim テキスト補間段落

SLIMはデフォルトでHTMLをエスケープします。同じ使用を避けるには、#{{content}}for#{content}

18
Karthik M

これについても同様の問題がありました。他の人が提供したコードを使用してもうまくいきませんでした。slimが変数をhtmlからエスケープしていたためです。私は Gon を使用してしまいました。これはシナトラ用ですが、Rails)用の宝石もあります。同様の問題を抱えている他の人に役立つことを願っています。

_your_erb_file_contain_javascript_code.erb 最初

そして、あなたのスリムファイルjavascript:パート:

#{ conditions ? (render 'your_erb_file_contain_javascript_code') : nil}
3
张健健
javascript:
  var isAdmin = "#{current_user.admin? ? 1 : 0}";
1
张健健