प्रत्यक्ष #{}
काम करता है, लेकिन सामान्य रूप में सबसे स्केलेबल/सुरक्षित समाधान नहीं है: #{}
के अंदर सभी इनलाइन माणिक डाल दिया।
उदाहरण के लिए, रूबी में शाब्दिक बैकस्लैश आप जहां यह एक नई पंक्ति चरित्र के रूप में व्याख्या की जाएगी जावास्क्रिप्ट में समस्याओं का कारण होगा:
- a = "\\n"
:javascript
'#{ a }' !== "\\n"
this awesome Rails cast से, निम्न तकनीक का इस्तेमाल किया जा सकता है:
escape_javascript
उपनाम: j
।
केवल स्ट्रिंग पर काम करता है।
जावास्क्रिप्ट स्ट्रिंग्स शाब्दिक उद्धरणों के अंदर रखने के लिए उपयुक्त प्रारूप में बैकस्लैश एस्केप की तरह, जावास्क्रिप्ट स्ट्रिंग्स, जैसे विशेष अर्थों में वर्णों से बच सकते हैं।
इनपुट के html_safe
स्थिति को बनाए रखने, तो html_safe
<
तरह अन्यथा विशेष HTML वर्ण <
में भाग निकले जायेगा की जरूरत है।
- a = "\\n<"
:javascript
'#{ j(a) }' === '\\n<'
'#{ j(a).html_safe }' === '\\n<'
to_json + html_safe
वर्क्स क्योंकि JSON almost a subset of Javascript object literal notation है।
स्ट्रिंग्स, सरणी और पूर्णांक सहित किसी भी हैश ऑब्जेक्ट पर काम करता है जो संबंधित डेटा प्रकार के JSON खंडों में कनवर्ट किया गया है।
- data = { key1: 'val1', key2: 'val2' }
:javascript
data = #{ data.to_json }
data.key1 === 'val1'
data.key2 === 'val2'
डेटा- विशेषताओं
जावास्क्रिप्ट डोम संचालन के साथ विशेषताओं के मान जोड़ें, उन्हें पुनः प्राप्त। content_tag
सहायक के साथ
बेहतर:
= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'}
:javascript
$('#data').data('key1') === 'val1'
$('#data').data('key2') === 'val2'
gon
नौकरी के लिए लाइब्रेरी विशेष: https://github.com/gazay/gon
शायद सबसे मजबूत समाधान।
Gemfile:
gem 'gon'
नियंत्रक:
gon.key1 = 'val1'
gon.key2 = 'val2'
लेआउट app/views/layouts/application.html.erb
:
<html>
<head>
<meta charset="utf-8"/>
<%= include_gon %>
दृश्य:
:javascript
gon.key1 === 'val1'
gon.key2 === 'val2'
उत्तर HAML के बिना समान होंगे: http://stackoverflow.com/questions/2464966/passing-ruby-variables-to-javascript-function-in-rails-view –