web-dev-qa-db-fra.com

Comment intégrer du code dynamique Ruby à la section "javascript" dans les modèles Slim?

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?

32
wkang

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
11
Vlad Khomich

In Slim

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

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}

18
Karthik M

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.

3

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}
3
张健健
javascript:
  var isAdmin = "#{current_user.admin? ? 1 : 0}";
1
张健健