2010-11-17 13 views
7

की एक पंक्ति के रूप में HTML आंशिक प्रस्तुत करें क्या HTML.erb आंशिक स्ट्रिंग की एक पंक्ति के रूप में प्रस्तुत करने का कोई तरीका है?रेल पर रूबी: स्ट्रिंग

मैं एक जावास्क्रिप्ट के अंदर _foo.html.erb आंशिक प्रस्तुत करने की कोशिश कर रहा हूं, जैसे कि मैं पूरे HTML दस्तावेज़ को स्ट्रिंग चर के रूप में उपयोग कर सकता हूं।

<h1>Hello</h1> 
<p>World</p> 

इस तरह मुझे जावास्क्रिप्ट में एक सिंटैक्स त्रुटि दे देंगे:

var foo = "<%= render :partial => "foo" %>"; 

और _foo.html.erb अंदर, मान लीजिए कि मैं निम्नलिखित डालते हैं:

मैं निम्नलिखित कोड की कोशिश की है क्योंकि आंशिक रूप से सीआरएलएफ है। लेकिन अगर मैं कोड लिखने की तरह ...

<h1>Hello</h1>" + 
"<p>World</p> 

अब, यह नहीं जावास्क्रिप्ट में एक त्रुटि है। मैं बाद का तरीका कर सकता हूं, लेकिन अगर आप आंशिक रूप से रूबी स्क्रिप्ट के साथ कोड की कई पंक्तियां रखते हैं तो यह एक आपदा है।

क्या कोई वैकल्पिक तरीका होगा?

अग्रिम धन्यवाद।

उत्तर

14

उपयोग समारोह escape_javascript:

var foo = "<%= escape_javascript(render :partial => 'foo') %>"; 
+3

यदि आप पाते हैं 'टाइप याद रखें कि यह' j' के रूप में एलियास है के लिए बहुत अधिक होने के लिए escape_javascript'। –

1

त्वरित और गंदे हैक:

var foo = "<%= render(:partial => "foo").gsub(/[\n\r]/, ' ') %>"; 

यह सिर्फ रिक्त स्थान के साथ नई-पंक्तियों, एक HTML पार्सर की दृष्टि से नो-सेशन बदल देता है।

हालांकि, यह जावास्क्रिप्ट ऑब्जेक्ट्स बनाने के लिए एक बहुत ही नाजुक तरीका है। आपको आंशिक रूप से उद्धरणों के लिए खाते की आवश्यकता होगी जो आपकी जावास्क्रिप्ट को अमान्य कर देगा, आदि। मैं सुझाव देता हूं कि आप जिस HTML को प्रस्तुत करना चाहते हैं उसके लिए जावास्क्रिप्ट टेम्पलेट्स बनाने की कोशिश करें और उन्हें अपने मॉडल के JSON संस्करणों के साथ पॉप्युलेट करें।