Une manière:
javascript_tag do
== "var all_product_ids = #{existing_ids.to_json};"
== "var products_json = #{@filter.data.to_json};"
ou:
= %Q{
var all_product_ids = #{existing_ids.to_json};
var products_json = #{@filter.data.to_json};
}
existe-t-il de meilleures solutions pour cela?
ce que je préfère faire, c'est de garder tout le javascript dans un fichier séparé.
par exemple, je le ferais comme suit (jquery):
dans votre mise en page:
...
<body data-product-ids="<%= existing_ids.to_json %>"
data-products-json="<%= @filter.data.to_json %>">
.. en js:
// create your application namespace
$.myapp = {};
$.myapp.allProductIds = $.parseJSON( $('body').attr('data-product-ids') );
$.myapp.products = $.parseJSON( $('body').attr('data-products-json') );
vous allez donc l'utiliser dans js comme ceci:
$.myapp.allProductIds
In Slim
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};
De https://github.com/slim-template/slim paragraphe d'interpolation de texte
SLIM échappe au HTML par défaut. Pour éviter la même utilisation # {{content}} pour # {content}
J'ai eu un problème similaire avec cela. L'utilisation du code que d'autres ont fourni n'a pas fonctionné pour moi car slim était du HTML qui échappait à ma variable. J'ai fini par utiliser Gon . Celui-ci est pour Sinatra, mais ils ont un bijou pour Rails aussi. J'espère que cela aide d'autres personnes ayant des problèmes similaires.
créer un _your_erb_file_contain_javascript_code.erb
première
Et puis dans votre fichier slim javascript:
partie:
#{ conditions ? (render 'your_erb_file_contain_javascript_code') : nil}
javascript:
var isAdmin = "#{current_user.admin? ? 1 : 0}";