diretti #{}
per semplici stringhe, ma non è il/soluzione sicura più scalabile in generale.
Ad esempio, la barra rovesciata letterale in Ruby potrebbe causare problemi in Javascript, dove sarà interpretato come un carattere nuova riga:
- a = "\\n"
:javascript
'#{ a }' !== "\\n"
Da this awesome Rails cast, le seguenti tecniche possono essere utilizzate:
escape_javascript
Alias: j
.
Funziona solo su stringhe.
Escapes caratteri che possono avere significati speciali nelle stringhe di Javascript, come escape backslash, in un formato adatto per inserire citazioni letterali stringa JavaScript.
Mantenere html_safe
stato dell'ingresso, quindi ha bisogno html_safe
altrimenti speciali caratteri HTML come <
otterrebbero defluito in <
.
- a = "\\n<"
:javascript
'#{ j(a) }' === '\\n<'
'#{ j(a).html_safe }' === '\\n<'
to_json + html_safe
funziona perché JSON è almost a subset of Javascript object literal notation.
Funziona su qualsiasi oggetto di hash, incluse stringhe, matrici e numeri interi che sono convertiti in frammenti JSON del tipo di dati corrispondente.
- data = { key1: 'val1', key2: 'val2' }
:javascript
data = #{ data.to_json }
data.key1 === 'val1'
data.key2 === 'val2'
dati- attributi
aggiungere valori agli attributi, recuperarle con le operazioni Javascript DOM.
meglio con l'aiuto content_tag
:
= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'}
:javascript
$('#data').data('key1') === 'val1'
$('#data').data('key2') === 'val2'
gon
biblioteca specializzata per il lavoro: https://github.com/gazay/gon
Probabilmente la soluzione più robusta.
Gemfile:
gem 'gon'
Controller:
gon.key1 = 'val1'
gon.key2 = 'val2'
layout app/views/layouts/application.html.erb
:
<html>
<head>
<meta charset="utf-8"/>
<%= include_gon %>
Vista:
:javascript
gon.key1 === 'val1'
gon.key2 === 'val2'
Le risposte saranno le stesse senza HAML: http://stackoverflow.com/questions/2464966/passing-ruby-variables-to-javascript-function-in-rails-view –