2011-06-03 8 views
12

मुझे ऐसा करने की क्या ज़रूरत है ताकि मैं रेल जेएस विचारों में कॉफीस्क्रिप्ट का उपयोग कर सकूं? उदाहरण के लिए:क्या मैं render.js पर निष्पादित विचारों में कॉफीस्क्रिप्ट का उपयोग कर सकता हूं?

def index 
    format.js { render :layout => false } 
end 

क्या मैं रेल index.js.coffee का उपयोग करने के लिए आदेश में करने के लिए की आवश्यकता होगी?

+0

क्या तुम सिर्फ .coffee विस्तार जोड़ने तो क्या होगा? (यदि आप रेल 3.1 का उपयोग कर रहे हैं) – bor1s

+0

मैंने किया, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। – Geo

+0

आप किस रेल संस्करण का उपयोग करते हैं? – bor1s

उत्तर

13

यह अभी तक 3.1 में समर्थित नहीं है। आपको Coffeebeans का उपयोग करने की आवश्यकता होगी।


अद्यतन: अब रेल में समर्थित है 3,2

+6

का उपयोग कर रहा हूं आपको मुझसे मजाक करना होगा! –

+0

यह 3.2 – Artur79

+0

में समर्थित है, धन्यवाद। – David

15

जॉनी जवाब सही है। आप pull requestCoffeeBeans पेज से लिंक को देखें, तो आप

एक बार जब हम एक तेज, स्वच्छ कार्यान्वयन है, यह कोर में स्वागत है कह DHH है। 3.2 हालांकि, एक अधिक संभावित लक्ष्य है।

मैंने संक्षेप में सैम स्टीफनसन और जोश पीक के साथ Railsconf पर बात की, क्योंकि यह एक गायब विशेषता थी जिसने लोगों ने मुझे कॉफीस्क्रिप्ट टॉक के बाद मुझसे पूछा था। आखिरकार, रेल 3.1 कॉफीस्क्रिप्ट को एक डिफ़ॉल्ट रूप से हार्ड के रूप में दबा रहा है; ऐसा लगता है कि ऐसे स्थान हैं जहां शुद्ध जेएस का उपयोग किया जाना चाहिए। सैम की प्रतिक्रिया यह थी कि यह कुशल नहीं होगा, क्योंकि आपको उत्पादन में भी, प्रत्येक पृष्ठ अनुरोध पर कॉफीस्क्रिप्ट कंपाइलर को आग लगाना होगा। ऐसा इसलिए है क्योंकि कोड

तरह
<%= coffee_script_tag do %> 
    alert "coffee script is #{verb}!" 
<% end %> 

, एक ERB प्रक्षेप (नहीं एक CoffeeScript प्रक्षेप-दुर्भाग्यपूर्ण है कि दोनों एक ही वाक्य विन्यास का उपयोग) बनाता है संभवतः हर अनुरोध पर CoffeeScript कोड का एक अलग स्ट्रिंग उपज है। और coffee_script_tag कार्यान्वयन से, बताने का कोई तरीका नहीं है, चाहे दिया गया कोड हर बार समान होगा (यानी क्या कोई ईआरबी इंटरपोलेशन है या नहीं)।

अब, कॉफीस्क्रिप्ट कंपाइलर बहुत तेज़ है, लेकिन जावास्क्रिप्ट को संकलित करना अभी भी प्रत्येक अनुरोध में थोड़ा अतिरिक्त समय जोड़ने जा रहा है। इसलिए रेल टीम इस अभ्यास को प्रोत्साहित करने में संकोच नहीं करती है।

दक्षता के लिए, और ERB छेड़छाड़ और CoffeeScript छेड़छाड़ के बीच अस्पष्टता से बचने के, तो आप शायद कहीं न कहीं अपने CoffeeScript रखना चाहिए (शायद आपके विचार के रूप में ही निर्देशिका में .coffee फ़ाइल के रूप में) और हाथ से जावास्क्रिप्ट को यह संकलन ।

+0

बहुत बहुत धन्यवाद। मुझे आज इस समस्या का सामना करना पड़ा और देखा कि रेलवे में यह समस्या कैसे संभाली जाती है। मेरे मामले में, मैं अपने कॉफ़ीस्क्रिप्ट को जावास्क्रिप्ट-अनुरोधों के लिए सादा जेएस के लिए अनुवाद कर रहा हूं जब तक कि रेल इसे बॉक्स से बाहर न करे। –

+0

आप दिखा रहे हैं कि हम दृश्य में क्या कर सकते हैं, लेकिन सवाल यह नहीं है कि वह नियंत्रक के अंदर या रूबी फ़ाइल के अंदर कैसे करना है? – uday

10

अब यह रेल 3.2 में काम कर रहा है। उदाहरण के लिए, मेरे पास पुस्तक नामक संसाधन है। इस संसाधन के साथ एप्लिकेशन/विचारों/पुस्तकों/index.html.erb पर एक फ़ाइल है निम्नलिखित:

<%= link_to 'test me', new_book_path(color: 'blue'), remote: true %> 

तो मैं निम्नलिखित के साथ ≈ पर एप्लिकेशन/विचारों/पुस्तकों/new.js.coffee पर एक फ़ाइल है कोड:

test = -> 
    'this is a test' 

console.log test() 
console.log("<%= params[:color] %>") 

मैं देख रहा हूँ:

'this is a test' 
'blue' 
अपने ब्राउज़र कंसोल में

+1

यह पुष्टि की गई है। मैंने इसे बिना किसी समस्या के रेलवे 3.2.3 के साथ इस्तेमाल किया। – stebooks

+2

क्या आपने इसे उत्पादन पर काम करने के लिए प्राप्त किया है? विचारों पर .coffee एक्सटेंशन dev मोड में काम करता है, लेकिन यह उत्पादन मोड पर विफल रहता है। मैं रेल 3.2.3 का उपयोग कर रहा हूँ –

1

अगर आप Coffeebeans स्थापित करना चाहते हैं न, यहाँ त्वरित और गंदी तरह से एक तरह से यह थोड़ा outputter ERB में हैकिंग द्वारा ऐसा करने के लिए:

<% 
require 'coffee-script'; 
def coffee_script; CoffeeScript.compile yield '' end %> 
<script type="text/javascript"> 
<% compiled = coffee_script do |_erbout|%> 
-> 
    console.log 'works! this part is coffeescript!' 
<% end %> 
<% _erbout.concat compiled %> 
</script> 
संबंधित मुद्दे

 संबंधित मुद्दे