2009-04-07 17 views
13

मैं रेल का उपयोग कर रहा हूं, लेकिन application.js में jQuery का उपयोग करके अविश्वसनीय रूप से अपने सभी जावास्क्रिप्ट को कर रहा हूं।रेल में अविभाज्य jQuery स्वत: पूर्ण

दुर्भाग्य से, यह URL को संदर्भित करना काफी मुश्किल बनाता है। उदाहरण के लिए, यदि मैं एक क्षेत्र स्वत: पूर्ण व्यवहार देना चाहता हूं, तो मुझे application.js में स्वत: पूर्ण URL को हार्ड-कोड करना होगा क्योंकि रेल url_for उपलब्ध नहीं है।

क्या application.js एआरबी का उपयोग करना संभव है? क्या मैं इस बारे में गलत तरीके से सोच रहा हूं?

उत्तर

6

आप फॉर्म या फॉर्म फ़ील्ड पर एक विशेषता के लिए यूआरएल जोड़ सकते हैं, अगर आपको मार्कअप पर कोई फर्क नहीं पड़ता है जो वैधकर्ता को पास नहीं कर सकता है, और फिर उस विशेषता को jQuery के साथ लाता है।

यह रेल 3.0 की तरह दिखता है नीचे एचटीएमएल 5 कस्टम डेटा का उपयोग कर जावास्क्रिप्ट सहायकों के साथ इस मार्ग जा रहे हैं जिम्मेदार बताते हैं: DHH @ Railsconf 09

2

हां, यह संभव है, वर्तमान रेल संस्करणों पर बस अपनी फ़ाइल application.js.erb पर कॉल करें; पुराने संस्करणों पर आप या तो अपना खुद का रोल कर सकते हैं या this जैसे कुछ ले सकते हैं।

+0

कूल! क्या यह सबसे अच्छा अभ्यास है? क्या आप इस विधि का उपयोग करते हैं? यह मेरे लिए अच्छा लगता है, लेकिन मैं अभी भी घबरा गया हूं मैं अनाज के खिलाफ काम कर रहा हूं। –

+1

AFAIK, यह इसे रेल में बना दिया क्योंकि बहुत से लोग इसे स्वयं कर रहे थे। यह एक बहुत ही आम उपयोग पैटर्न है। एक चेतावनी: यह मार्गों की तरह अर्द्ध स्थैतिक चीजों को इंजेक्शन देने के लिए है; यदि सामग्री किसी सत्र में बदलने जा रही है, तो इसके बजाय जावास्क्रिप्ट को AJAX wrapper में भेजें। – MarkusQ

+0

वास्तव में यह काम नहीं प्रतीत होता है - क्या मुझे फ़ाइल को सार्वजनिक/जावास्क्रिप्ट से बाहर ले जाना है? अगर मैं फ़ाइल का नाम बदलता हूं तो मुझे एक रूटिंग त्रुटि मिलती है जब मेरा ब्राउज़र 'application.js' का अनुरोध करता है। –

2

application.js.erb मत करो, यह कैशिंग शामिल होने पर भी एक अच्छा अभ्यास नहीं है। आपको स्वत: पूर्ण अंतराल (यूआरएल जिससे आप डेटा प्राप्त कर रहे हैं) को अपने फॉर्म के एक्शन यूआरएल के समान बनाते हैं। अपने application.js में बस &ac=1 संलग्न करें और अपने नियंत्रक इसे समझें।

1

आप हार्डकोड करने it-- बस एक ही जे एस समारोह है कि स्वत: पूर्ण कहते हैं बनाने की जरूरत नहीं है श्रोता, और स्वत: पूर्ण के लिए पैरामीटर स्वीकार करता है, और फोन है कि आपके टेम्पलेट से जे एस समारोह:

(कोड स्पष्टता के लिए सरलीकृत)

application.js:

function add_autocomplete(id, url) { 
    $("#" + id).autocomplete(
     source: url 
    ); 
}; 

application_helper.rb:

def add_autocomplete(id, url) 
    render :text => "<script> add_autocomplete('#{id}', '#{url}');</script>" 
end 

ERB टेम्पलेट:

<input id="i_want_autocomplete" /> 
<%= add_autocomplete("i_want_autocomplete", items_js_path() %> 
संबंधित मुद्दे