2010-05-23 15 views
30

मेरे रेल अनुप्रयोगों (सभी 2.3.5) को इनलाइन जावास्क्रिप्ट, आरजे, प्रोटोटाइप और jQuery के कुल मिश्रण का उपयोग करने के लिए सर्वोत्तम प्रथाओं का पालन करता है। चलो इसे सीखने या दर्द बढ़ने कहते हैं। हाल ही में मैं अविभाज्य जावास्क्रिप्ट के साथ अधिक से अधिक infatuated किया गया है। यह आपके एचटीएमएल को साफ करता है, उसी तरह सीएसएस ने इसे साफ कर दिया है।अविश्वसनीय जावास्क्रिप्ट

लेकिन सबसे उदाहरण मैंने देखा है छोटा सा उदाहरण हैं, और वे application.js

के अंदर सभी जावास्क्रिप्ट (jQuery) डाल अब मैं एक बहुत बड़ी आवेदन है, और मैं अपने js की संरचना करने के तरीके में सोच रहा हूँ। मैं किसी भी तरह कि मेरी स्क्रिप्ट अभी भी दृश्य के करीब है की तरह है, तो मैं जैसे

orders.html.erb 
orders.js 

जहां orders.js विनीत जावास्क्रिप्ट उस दृश्य के लिए विशिष्ट होता है कुछ सोच रहा हूँ। लेकिन शायद यह सिर्फ मुझे रूढ़िवादी है :)

मैंने इस समस्या के बारे में येहुदा काट्ज़ द्वारा कुछ पोस्ट here और here के बारे में कुछ पोस्ट पढ़ी हैं, जहां वह इस समस्या से निपटता है। यह आपके जेएस-फाइलों के माध्यम से जाएगा और केवल आपके दृश्य के लिए प्रासंगिक लोड करेगा। लेकिन हां, मुझे वर्तमान कार्यान्वयन नहीं मिल रहा है।

तो मेरे सवालों का:

  • कैसे आप सबसे अच्छा संरचना अपने विनीत जावास्क्रिप्ट करते हैं; अपना कोड प्रबंधित करें, आप कैसे सुनिश्चित करते हैं कि यह HTML से स्पष्ट है कि कुछ क्या करना है। मुझे लगता है कि अच्छे वर्ग के नाम एक लंबा सफर तय करते हैं :)
  • आप अपनी फाइलों की व्यवस्था कैसे करते हैं, उन्हें सभी में लोड करते हैं? बस थोड़ा सा? प्रासंगिक स्क्रिप्ट लोड करने के लिए आप अपने दृश्य में content_for :script या javascript_include_tag का उपयोग करते हैं। या ...?
  • क्या आप पैरामीटर के साथ बहुत ही सामान्य फ़ंक्शन (जैसे डिलीट) लिखते हैं (अतिरिक्त विशेषताएं जोड़ें?), या आप बहुत विशिष्ट फ़ंक्शन (DRY?) लिखते हैं। मुझे रेल 3 में पता है कि एक मानक सेट है, और सबकुछ वहां पर अमानवीय है। लेकिन रेल 2.3.5 में कैसे शुरू करें?

संक्षेप में: रेल में अविभाज्य जावास्क्रिप्ट करने के लिए सर्वोत्तम प्रथाएं क्या हैं? :)

उत्तर

10

मुझे नहीं लगता कि एक सर्वोत्तम अभ्यास है, लेकिन मैं आपको बता दूंगा कि मैं क्या करता हूं।

  1. मैं public/javascripts/ निर्देशिका में अपने स्वयं के उद्देश्य के साथ के लिए जे एस फ़ाइलें प्रत्येक की एक श्रृंखला है। कुछ उदाहरण utility.jschat.jsshopping_basket.js और इसी तरह से हो सकते हैं।

  2. मैं asset packager का उपयोग करता हूं और मेरी सभी सामान्य उपयोग कार्यक्षमता के लिए एक और वसा संग्रह परिभाषित करता हूं और दूसरा व्यवस्थापक केवल कार्यक्षमता के लिए परिभाषित करता है। सर्वर लागत के रास्ते के लिए दौर यात्रा बहुत अधिक है। मैं मूल रूप से सभी जेएस को एक ब्लॉब (सामान्य रूप से)

  3. पर संशोधित पहले जेड में शामिल करता हूं, मैं पृष्ठों में मूल $(document).ready हुक इनलाइन की अनुमति देता हूं, और उन्हें वास्तव में छोटा रखता हूं।

  4. डेटा जो मेरी जेएस फ़ाइलों को एक्सेस करने की आवश्यकता है पृष्ठ के साथ इनलाइन प्रदान की जाती है। (डोम में आमतौर पर, कभी कभी के रूप वार्स - उदाहरण के var xyz = 100।)

  5. मैं आमतौर पर जावास्क्रिप्ट के साथ अपने नियंत्रकों बंद का विकास होगा (और यकीन है कि यह सब काम करता है बनाने के), तो मैं उसे चालू करें और कुछ if request.xhr? छिड़क जहां की जरूरत है।


ध्यान रखें, रेल 3.1 निर्मित एक सबसे अच्छा अभ्यास का परिचय है, देखें: http://guides.rubyonrails.org/asset_pipeline.html - एक निजी नोट मैं नई पाइपलाइन के साथ प्रदर्शन और विन्यास मुद्दों पड़ा है पर, फिर भी कई अन्य लोगों के महान पड़ा है इसके साथ सफलता

+0

यह बहुत दिलचस्प है। पूर्ण। मुझे अभी भी दिलचस्पी है कि दूसरों को क्या कहना है। – nathanvda

3

मैंने हाल ही में दस्तावेज किया कि मैं managing javascript in Ruby on Rails कैसे रहा हूं। मैं मूल रूप से चीजों को कई छोटी, दानेदार फाइलों में विभाजित करता हूं, प्रत्येक एक उपयुक्त नामस्थान के साथ और फिर परिसंपत्ति_पैकर का उपयोग करके उत्पादन के लिए उन्हें एक ही फ़ाइल में विलय करता है।

+0

मुझे यह पसंद है कि आप अपने विचारों के लिए अपने नियंत्रक के समान नाम के साथ .js फ़ाइल को स्वचालित रूप से कैसे लोड कर सकते हैं। यह कम से कम एक अच्छी शुरुआत लगता है :) – nathanvda

1

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

+0

मुझे वास्तव में आपका सुझाव पसंद है, और यह वास्तव में मुझे पसंद आएगा के करीब है। अब मैं जो करता हूं वह प्रति नियंत्रक फ़ाइलों में जेएस को अलग करता है, लेकिन फिर एक बड़े संयुक्त जेएस में चक जाता है क्योंकि यह तेज होता है (अलग फ़ाइलों के टन के बजाय 1 बड़ा जेएस)। – nathanvda

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