2013-06-28 5 views
49

मॉड्यूल के लिए मैं एक ऑब्जेक्ट वापस नहीं करता जिसे मैं परिभाषित करने के बजाय आवश्यकता का उपयोग कर रहा हूं। उदाहरण के लिए कहते हैं कि मैं निम्नलिखित jQuery प्लगइन (jquery.my-plugin.js) है:RequJs - परिभाषित बनाम

require(['jquery'], function($) { 
    $.fn.myPlugin = function(options) { 
     ... 
    }; 
}); 

अब अगर मैं एक और मॉड्यूल में निम्नलिखित कहते हैं:

require(['jquery', 'jquery.my-plugin'], function($) { 
    $('#element').myPlugin(); 
}); 

मैंने पाया यह नहीं करता है ' टी काम नहीं करता क्योंकि myPlugin पंजीकृत नहीं है। हालांकि अगर मैं अपने jquery.my-plugin मॉड्यूल के भीतर परिभाषित करने की आवश्यकता को बदलता हूं तो यह ठीक काम करता है।

अगर कोई यह साफ़ कर सकता है तो मुझे इसकी सराहना होगी कि मुझे ऐसा क्यों करना है। मैं आगे बढ़ने और इसका उपयोग करने से पहले पूरी तरह से कुछ समझना पसंद करता हूं। धन्यवाद

+2

की [उपयोग करने के लिए जब आवश्यकता संभव डुप्लिकेट और जब करने के लिए है परिभाषित करें] (http://stackoverflow.com/questions/9507606/when-to-use-require-and-when-to-use-define) – Armand

उत्तर

90

अनिवार्य रूप से, जब आप require का उपयोग करते हैं तो आप कह रहे हैं "मुझे यह चाहिए, लेकिन मैं इसकी सभी निर्भरताओं को भी चाहता हूं"। तो नीचे दिए गए उदाहरण में, हमें ए की आवश्यकता है, लेकिन आवश्यकताएं सभी निर्भरताओं की खोज करेंगी और सुनिश्चित करें कि वे जारी रखने से पहले लोड हो जाएं।

require(['a'], function(a) { 
    // b, c, d, e will be loaded 
}); 

// File A 
define(['b','c','d','e'], function() { 
    return this; 
}); 

अंगूठे का सामान्य नियम आप define का उपयोग जब आप एक मॉड्यूल है कि आपके आवेदन द्वारा दोबारा इस्तेमाल किया जाएगा परिभाषित करना चाहते हैं और आप require का उपयोग केवल एक निर्भरता लोड करने के लिए है।

+2

मेरा से बेहतर बेहतर कहा :) मेरा हटा देगा। – oooyaya

+0

धन्यवाद लेकिन फ़ाइल ए के लिए परिभाषित करने के बजाय मैं आवश्यकता क्यों नहीं कर सकता? अनिवार्य रूप से यह वही कह रहा है कि फाइल ए को निष्पादित करने से पहले बी, सी, डी और ई की आवश्यकता है। – nfplee

+51

अंगूठे का सामान्य नियम आप 'परिभाषित' का उपयोग करते हैं जब आप एक मॉड्यूल को परिभाषित करना चाहते हैं जिसे आपके एप्लिकेशन द्वारा पुन: उपयोग किया जाएगा और आप निर्भरता को लोड करने के लिए 'आवश्यकता' का उपयोग करते हैं। –

2

नीचे कोड कि jquery.my-plugin.js जो एक मॉड्यूल 'jquery.my-प्लगइन' कि कहीं एक निर्भरता के रूप में इस्तेमाल किया जा सकता कहा जाता है को परिभाषित करता है के अंदर होना चाहिए।

define(['jquery'], function($) { //jquery is a dependency to the jquery.my-plugin module 
    $.fn.myPlugin = function(options) { //adds a function to the *global* jQuery object, $ (global since jQuery does not follow AMD) 
     ... 
    }; 
}); 

नीचे कोड का एक वर्ग जहां वैश्विक jQuery वस्तु के लिए अपने प्लगइन समारोह देते हैं और फिर इसे उपयोग करना चाहते हैं ...

require(['jquery.my-plugin'], function() { // jquery.my-plugin is loaded which attaches the plugin to the global JQuery object as shown above, then this function fires 

    //the only reason $ is visible here is because it's global. If it was a module, you would need to include it as a dependency in the above require statement 
    $('#element').myPlugin(); //the $ refers to the global object that has the plugin attached 
}); 
+1

सब मेरे साथ अच्छा लग रहा है। हाँ $ ऑब्जेक्ट को वैश्विक स्तर पर परिभाषित किया गया है, इसलिए मुझे लगता है कि यह वैकल्पिक है कि इसे आवश्यक कथन के भीतर शामिल करना है या नहीं।ऐसा करके आप विरोधाभासी पुस्तकालयों के साथ संभावित मुद्दों से बचते हैं और यह ऊपर परिभाषित कथन के अनुरूप है। – nfplee