2009-03-02 14 views
47

'अविभाज्य जावास्क्रिप्ट' सिफारिशों के अनुसार मैं अपने जावास्क्रिप्ट तर्क को
अलग फ़ाइलों में अलग करना चाहता हूं। हालांकि मुझे नहीं पता कि उन्हें व्यवस्थित कैसे किया जाए।रेलवे में प्रति दृश्य जावास्क्रिप्ट फ़ाइल

मैं चाहिए:

  1. बस सभी आवेदन जावास्क्रिप्ट Application.js फ़ाइल में फेंक और लेआउट पृष्ठ के साथ इसे लोड? यह सरल दृष्टिकोण है लेकिन मैं एक bloated application.js के साथ खत्म हो जाएगा। कुछ उपयोगकर्ता केवल कुछ पृष्ठों पर जाना चाहते हैं, लेकिन यह पूरी फ़ाइल प्रीलोड हो जाएगी जो अच्छी नहीं है।
  2. या क्या मुझे प्रत्येक दृश्य के लिए एक अलग जावास्क्रिप्ट फ़ाइल बनाना चाहिए और उन्हें स्वतंत्र रूप से लोड करना चाहिए? यह प्रश्नों का एक सेट बनाता है। प्रत्येक जेएस फ़ाइल को इसी दृश्य में कैसे लिंक करें?
    धन्यवाद।

उत्तर

103

हर बार application.js में मुख्य जावास्क्रिप्ट लोड करें। अब विभिन्न जरूरतों के लिए फाइलें बनाएँ। एक form.js फ़ाइल, एक myfancypart.js फ़ाइल आदि बनाएं। उन्हें application.html.erb लेआउट में लोड न करें। उन्हें गतिशील रूप से लोड करें जब आपको उनकी आवश्यकता:

application.html.erb:

<% content_for :javascript_includes do %> 
    <%= javascript_include_tag "forms.js" %> 
<% end %> 

content_for ब्लॉक में सब कुछ पर लोड किया जाएगा:

<%= javascript_include_tag "application" %> 
<%= yield :javascript_includes %> 

अपने view.html.erb के शीर्ष उपज: जावास्क्रिप्ट_ शामिल है।

+9

यह, विकास के लिए ठीक है के साथ बदलता उपयोग करना चाहते हैं, लेकिन उत्पादन में आप संभव के रूप में कुछ HTTP अनुरोध करना चाहता हूँ। अपने सभी जेएस को एक अनुरोध में सामने लोड करना जो कैश हो जाता है, बेहतर प्रदर्शन कर सकता है। – jonnii

+2

रेल 3 संकल्प जो उत्पादन के लिए संपत्ति पाइपलाइन के साथ मुद्दों को हल करता है। –

+2

तो, क्या यह चुना गया उत्तर यहां इस रेल 3 संपत्ति पाइपलाइन मॉडल के अनुरूप है? – MattSlay

12

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

एक और चीज जो आपको रूचि दे सकती है वह एक जावास्क्रिप्ट निर्भरता प्रबंधक है, जिसे आप मणि का उपयोग करके इंस्टॉल कर सकते हैं। आप वेबसाइट (http://getsprockets.org/) या जिथब पेज (http://wiki.github.com/sstephenson/sprockets) से sprockets पर अधिक जानकारी प्राप्त कर सकते हैं। यह बड़े जावास्क्रिप्ट अनुप्रयोगों को और अधिक प्रबंधनीय लिखता है।

+0

इस 3.1 –

2

एक Jammit उपयोग कर सकते हैं सीएसएस और javascripts फ़ाइलों को शामिल करने

विस्तार के लिए

: http://documentcloud.github.com/jammit/

उपयोग:

चरण 1:

assets.yml में जोड़े js-फ़ाइलें (नीचे कोड देखें)

जावास्क्रिप्ट:

footer: 

- app/javascripts/lib/*.js 
- app/javascripts/jquery-plugins/*.js 
- app/javascripts/custom/*.js 
- app/javascripts/application.js 

हैडर:

- app/javascripts/core/*.js 
- app/javascripts/head/*.js 

चरण 2:

आवेदन लेआउट में सरल कोड जोड़ें:

<%= include_javascripts :header %> 
<%= include_javascripts :footer %> 
5

इस रेल 3.1 और संपत्ति पाइप लाइन के साथ बदलता !!!

अलग-अलग फाइलें आपके द्वारा इंगित की जाने वाली सर्वोत्तम हैं। उन सभी को संदर्भित करने और उन्हें लिंक करने के बारे में मुद्दे रेल के साथ दूर हो जाते हैं 3.1 जिसका उद्देश्य उन्हें उत्पादन के लिए एकल फ़ाइलों में संकलित करना है।

-1

हो सकता है आप application_helper

def javascript(*files) 
    content_for(:head) { javascript_include_tag(*files) } 
end 

def stylesheet(*files) 
    content_for(:head) { stylesheet_link_tag(*files) } 
end 
संबंधित मुद्दे