Direct, #{}
travaille pour de simples chaînes de caractères, mais n'est pas la plus évolutive / solution de sécurité en général.
Par exemple, le backslash en Ruby pourraient vous causer des problèmes en Javascript où il sera interprété comme un caractère de saut de ligne:
- a = "\\n"
:javascript
'#{ a }' !== "\\n"
À partir de ce génial Rails en fonte, les techniques suivantes peuvent être utilisées:
escape_javascript
Alias: j
.
Fonctionne uniquement sur les cordes.
S'échappe les caractères qui peuvent avoir une signification spéciale dans les chaînes de caractères Javascript,
comme des antislashes, dans un format adapté à mettre à l'intérieur de Javascript littéral de chaîne entre guillemets.
Conserver html_safe
statut de l'entrée,
donc, les besoins en html_safe
sinon caractères spéciaux HTML comme <
permettrait d'obtenir échappé en <
.
- a = "\\n<"
:javascript
'#{ j(a) }' === '\\n<'
'#{ j(a).html_safe }' === '\\n<'
to_json + html_safe
Fonctionne parce que JSON est presque un sous-ensemble de Javascript object notation littérale.
Fonctionne sur n'importe quel objet de hachage, y compris les chaînes, les tableaux et les entiers qui ne sont
converti en JSON fragments du type de données correspondant.
- data = { key1: 'val1', key2: 'val2' }
:javascript
data = #{ data.to_json }
data.key1 === 'val1'
data.key2 === 'val2'
attributs data-
Ajouter des valeurs pour les attributs, les récupérer avec Javascript DOM opérations.
Mieux avec l' content_tag
helper:
= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'}
:javascript
$('#data').data('key1') === 'val1'
$('#data').data('key2') === 'val2'
gon
Bibliothèque spécialisée pour l'emploi: https://github.com/gazay/gon
Probablement l'un des plus solides de la solution.
Gemfile:
gem 'gon'
Contrôleur:
gon.key1 = 'val1'
gon.key2 = 'val2'
Mise en page app/views/layouts/application.html.erb
:
<html>
<head>
<meta charset="utf-8"/>
<%= include_gon %>
Vue:
:javascript
gon.key1 === 'val1'
gon.key2 === 'val2'