2011-12-11 5 views
5

यह डिफ़ॉल्ट application.js हैनियंत्रक/कार्रवाई के आधार पर जावास्क्रिप्ट संपत्ति कैसे लोड करें?</p> <pre><code>//= require jquery //= require jquery_ujs //= require_tree . </code></pre> <p>CoffeeScript टेम्पलेट्स इस सामग्री है:

# Place all the behaviors and hooks related to the matching controller here. 
# All this logic will automatically be available in application.js. 
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ 

मेरे लिए, "मिलान नियंत्रक से संबंधित यहाँ" इसका मतलब है कि foo_bar.js.coffee ही भरी हुई होनी चाहिए जब foo_bar नियंत्रक का उपयोग किया जाता है। क्या मैं सही हू?

बात यह है कि यह सभी जावास्क्रिप्ट फ़ाइलों को लोड करता है भले ही उनकी आवश्यकता न हो। इसके अलावा ... मैं जानना चाहता हूं कि नियंत्रक की कार्रवाई के आधार पर सशर्त रूप से जावास्क्रिप्ट फ़ाइलों को कैसे शामिल किया जाए।

उत्तर

12

तरीके यह करने के लिए की एक जोड़े, सबसे आसान और सबसे सुरुचिपूर्ण ढंग से शामिल मैं ने पाया है यह है:

//= require_tree . 

निर्देशक निकालें, और अपने templ बदल

<%= javascript_include_tag "application", controller_name %> 

फिर अपने वैश्विक जेएस को एप्लिकेशन में लोड करें, और नियंत्रक_नाम में नियंत्रक विशिष्ट लोड करें।

उदाहरण के लिए, यदि आप पोस्ट_कंट्रोलर में हैं, तो आपको पोस्ट.जेएस या पोस्ट.जेएस.coffee लोड हो जाएगा।

संपादित

कार्रवाई करने के लिए, तुम भी मेरे प्रस्तावित समाधान के लिए

action_name 

जोड़ सकते हैं। एक बात जिसे आप विचार कर सकते हैं, इसे application_controller में तोड़ रहा है।rb:

before_filter :your_function 

def your_function 
    @controller = controller_name 
    @action = action_name 
end 

फिर अपने लेआउट में इस तरह इसे का उपयोग

<%= javascript_include_tag "application", "#@controller.#@action" %> 
+1

+1 मैं सहमत हूँ। यह एक अच्छा और मॉड्यूलर समाधान – lucapette

+2

कूल है, इस प्रकार जेनरेट किए गए कंकाल को किया जाना चाहिए था। कार्यों के बारे में क्या? मेरा मतलब है ... मैं केवल एक विशिष्ट कार्रवाई के लिए एक जावास्क्रिप्ट लोड करना चाहता हूं ... क्या यह एक आसान तरीके से करना भी संभव है? – Cristian

3

require_tree आपके application.js में निर्देश आपके संपत्ति पेड़ में पाए गए सभी जेएस और कॉफी फ़ाइलों को लोड करता है। यदि आप इसे हटाते हैं तो यह केवल निर्दिष्ट फ़ाइलों को लोड करेगा।

मेरे लिए, "मिलान नियंत्रक यहाँ से संबंधित" का मतलब है कि foo_bar.js.coffee केवल जब foo_bar नियंत्रक प्रयोग किया जाता है लोड किया जाना चाहिए। क्या मैं सही हू?

नहीं, फ़ाइलों को "आवश्यकता" निर्देशों के माध्यम से निर्दिष्ट के रूप में लोड किया गया है।

भी ... मैं जानना चाहता हूं कि नियंत्रक की कार्रवाई के आधार पर सशर्त रूप से जावास्क्रिप्ट फ़ाइलों को कैसे शामिल किया जाए। में एक दूसरे फ़ाइलों के रूप में की जरूरत की आवश्यकता होती है

, प्रत्येक नियंत्रक के लिए एक foo_bar.js फ़ाइल, और सशर्त उन्हें अपने लेआउट

# some_layout.erb 
<%= javascript_include_tag params[:controller] %> 
संबंधित मुद्दे