Direkte #{}
Werke für einfache Strings, aber nicht die am besten skalierbare/sichere Lösung im Allgemeinen.
Zum Beispiel kann der Backslash in Ruby würden Sie Probleme in Javascript verursachen, wo es als Newline-Zeichen interpretiert werden:
- a = "\\n"
:javascript
'#{ a }' !== "\\n"
Von this awesome Rails cast können die folgenden Techniken verwendet werden:
escape_javascript
Alias: j
.
Funktioniert nur auf Strings.
Escapes Zeichen, die spezielle Bedeutungen in Javascript Zeichenfolgen haben können, wie Backslash Escapes, in ein Format geeignet, um innerhalb Javascript Zeichenfolge Literal Zitate setzen.
Pflegen html_safe
Status des Eingangs, muss so html_safe
sonst spezielle HTML-Zeichen wie <
würde in <
entkommen lassen.
- a = "\\n<"
:javascript
'#{ j(a) }' === '\\n<'
'#{ j(a).html_safe }' === '\\n<'
to_json + html_safe
Works weil JSON almost a subset of Javascript object literal notation ist.
Funktioniert auf jedem Hash-Objekt, einschließlich Strings, Arrays und Ganzzahlen, die in JSON-Fragmente des entsprechenden Datentyps konvertiert werden.
- data = { key1: 'val1', key2: 'val2' }
:javascript
data = #{ data.to_json }
data.key1 === 'val1'
data.key2 === 'val2'
Daten- Attribute
Werte Attribute hinzufügen, abrufen sie mit Javascript DOM-Operationen.
besser mit dem content_tag
Helfer:
= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'}
:javascript
$('#data').data('key1') === 'val1'
$('#data').data('key2') === 'val2'
gon
Bibliothek für den Job spezialisiert: https://github.com/gazay/gon
Wahrscheinlich ist die robusteste Lösung.
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 %>
Ausblick:
:javascript
gon.key1 === 'val1'
gon.key2 === 'val2'
Die Antworten werden die gleichen ohne HAML sein: http://StackOverflow.com/Questions/2464966/Passing-Ruby-Variables-To-Jascript-Funktion-in-Rails-view –