2010-07-27 16 views
5

मैं रेल के लिए नया हूं और मेरे पास जावास्क्रिप्ट कार्यों को एक दृश्य के भीतर कॉल करने में एक बहुत ही सरल समस्या है। रेल 2 में मैं ...रेल में देखने से जावास्क्रिप्ट कार्यों को कॉल करना 3

= javascript_tag "name(arguments)" 

जहां जावास्क्रिप्ट फ़ंक्शन "नाम" मेरे application.js फ़ाइल में स्थित था। हालांकि, यह रेल 3 में काम नहीं करता है? या क्या मैं कुछ न कुछ भूल रहा हूं? मैं बिना किसी जवाब के Google को कुछ समय खोज रहा हूं।

अद्यतन:

ठीक है, तो मैं दो अलग अलग तरीकों के स्रोत (javascript_tag का उपयोग करने और haml जावास्क्रिप्ट फिल्टर) के रूप में सुझाव को देखा। और यह बहुत अजीब है क्योंकि एचटीएमएल स्रोत समान प्रतीत होता है? स्क्रिप्ट प्रकार की घोषणा में डबल और सिंगल कोट्स में अंतर के अलावा।

सबसे पहले: javascript_tag जो काम नहीं करता है

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}'" 

स्रोत ...

<div id='number_number_interval_727'>loading</div> 
<script type="text/javascript"> 
//<![CDATA[ 
number_interval(6952596670.36814, 2.33002440293917, 0, 'number_number_interval_727' 
//]]> 
</script> 

दूसरा का उपयोग कर: haml का उपयोग कर जावास्क्रिप्ट फिल्टर और यह काम करता है

:javascript 
    number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}') 

स्रोत ...

<div id='number_number_interval_727'>loading</div> 
<script type='text/javascript'> 
//<![CDATA[ 
number_interval(6952596917.02179, 2.33002440293917, 0, 'number_number_interval_727') 
//]]> 
</script> 

ठीक है, मुझे लगता है कि मैं सिर्फ haml फिल्टर के साथ रह सकते हैं!

उत्तर

2

आपने एक सिंटैक्स त्रुटि है।मुझे लगता है कि यह होना चाहिए:

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}')" 
+0

वाह ... विश्वास नहीं कर सकता कि मुझे वह याद आया :) – kbjerring

0

बाहर चेक link text

पर सही वाक्य रचना और देखें कि क्या आप रेल 3 में मेरे लिए अपने file.As इस कामकाज में जावास्क्रिप्ट चूक को शामिल किया है भी

+0

वाक्यविन्यास सही है और जावास्क्रिप्ट डिफ़ॉल्ट शामिल हैं। जावास्क्रिप्ट_टैग "अलर्ट ('सब अच्छा है')" यह भी काम करता है, लेकिन अगर मैं उदाहरण के लिए "अलर्ट ('सब अच्छा है') डालता हूं, इसे अपने आप में डाल दें, इसे application.js में रखें, और फिर कॉल करने का प्रयास करें यह javascript_tag के साथ यह नहीं करता है। लेकिन शायद यह करने का तरीका नहीं है। – kbjerring

+0

ठीक है तो आपको अपने फ़ंक्शन या सिंटैक्स में कोई त्रुटि है। अपने फ़ंक्शन कोड को ठीक उसी तरह पोस्ट करें जैसा आपके पास है। –

2

मेरा एक दोस्त इस तथ्य की ओर मुझे बताया कि हैमल में एक जावास्क्रिप्ट सहायक है। जाहिर है, मैं का उपयोग करके जावास्क्रिप्ट कार्यों कॉल कर सकते हैं ...

:javascript 
    name_of_function(arguments) 

यह काम करता है, लेकिन निश्चित रूप से केवल haml साथ।

0

बेवकूफ सवाल लेकिन ... application.js आपके लेआउट में शामिल है?

कोशिश करने का एक विकल्प है "वास्तविक" जावास्क्रिप्ट में अपने दृश्य में जेएस फ़ंक्शन-कॉल को हाथ-कोड करना - यह देखने के लिए कि यह काम करता है या नहीं। उदाहरण के लिए

<script type="text/javascript"> 
    name(arguments) 
</script> 

तब आप सुनिश्चित कर सकते हैं कि यह स्वयं में जेएस (या इसकी कमी) नहीं है।

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}'" 

number_interval समारोह के लिए समापन कोष्ठक याद आ रही है:

+0

हां, application.js शामिल है। मुझे लगता है: हैमल में जावास्क्रिप्ट फ़िल्टर जो भी आप सुझाते हैं, ... और यह काम करता है। – kbjerring

+0

ठीक है ... तो अगला विकल्प एचटीएमएल में डाले जाने पर एचटीएमएल में डाले जाने वाले स्रोत को देखना है ... और जब आप हैमल-वर्जन का उपयोग करते हैं तो उस स्रोत की तुलना करें। यदि आप प्रासंगिक स्रोत-कोड को अपने प्रश्न (उपरोक्त) में कॉपी कर सकते हैं तो हम इसका पता लगा सकते हैं और देख सकते हैं कि क्या हो रहा है। –

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