36

单程:

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

有没有更好的解决方案?

4

7 回答 7

83

在苗条

javascript:
  var all_product_ids = "#{existing_ids.to_json}";
  var products_json   = "#{@filter.data.to_json}";
于 2011-07-24T22:38:32.280 回答
21
javascript:
  var all_product_ids = #{raw existing_ids.to_json};
  var products_json   = #{raw @filter.data.to_json};
于 2012-11-29T07:16:26.697 回答
19

来自https://github.com/slim-template/slim 文本插值段落

SLIM 默认转义 HTML。为避免将#{{content}}用于#{content}

于 2013-10-28T07:47:32.557 回答
10

我更喜欢做的是将所有 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
于 2011-04-13T08:38:06.613 回答
3

我有一个类似的问题。使用其他人提供的代码对我不起作用,因为 slim 是 html 转义我的变量。我最终使用了Gon。这个是给 Sinatra 的,但他们也有一个用于 Rails 的宝石。希望它可以帮助其他有类似问题的人。

于 2013-02-07T08:27:18.300 回答
3

创建_your_erb_file_contain_javascript_code.erb第一个

然后在你的苗条文件javascript:部分:

#{ conditions ? (render 'your_erb_file_contain_javascript_code') : nil}
于 2015-02-14T02:45:24.150 回答
2
javascript:
  var isAdmin = "#{current_user.admin? ? 1 : 0}";
于 2015-08-05T10:06:45.557 回答