2011-12-14 12 views
19

require.jsdefine([requiremens], object) के साथ मॉड्यूल के अंदर वस्तुओं को परिभाषित करने का तरीका सबसे अच्छा तरीका है।जेएस खंडहर कोड नेविगेशन

तो प्रत्येक पृष्ठ, या अन्य जेएस फ़ाइल, require() कॉल करेगी और पैरामीटर के रूप में मॉड्यूल प्राप्त करेगी।

यह बहुत बढ़िया काम करता है, प्रत्येक फ़ंक्शन/मॉड्यूल का अपना नामस्थान होता है।

// AJAX/Requests.js 

define(['UI/Message'],function(Message){ 
var Requests={ 
    checkResponse:function(response){ 
     //1==ok 
     //0==error 
     //2==good message 
     //3==good message, but still stop 
     if(response.status==1){ 
      return true; 
     } 
     else if(response.status==2){ 
      Message.good(response.message); 
      return true; 
     } 
     else if(response.status==3){ 
      Message.good(response.message); 
      return false; 
     } 
     else{ 
      Message.bad(response.message); 
      return false; 
     } 
    } 
}; 
return Requests; 
}); 

अब यूआई/संदेश एक ही तरीके से परिभाषित किया गया है, और यह ऑब्जेक्ट:

समस्या यह है कि मेरे पास है है।

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

क्या इस मुद्दे को हल करने के लिए विशेष रूप से पिचर्म के लिए कुछ आवश्यक है या आवश्यक है। Js? जब आपके पास बहुत सारे कोड होते हैं तो यह नेविगेट करने के लिए गड़बड़ हो जाता है, यही कारण है कि मैं पहली जगह आईडीई का उपयोग करता हूं!

और इससे भी बदतर: संपादक कभी नहीं जानता कि वस्तुओं के कार्यों में क्या है!

एक संभावित समाधान जो मैं देख सकता हूं वह संलग्न नामस्थानों का उपयोग नहीं करना है, और define() कॉल से पहले वैश्विक चर घोषित करना है, लेकिन इस मामले में सभी वस्तुओं को UI_Message, AJAX_Requests की तरह कहा जाएगा। यह सुनिश्चित करने के लिए, कि मेरे पास दो अलग-अलग स्थानों में कुछ संदेश नहीं है ....

और मुझे यकीन नहीं है, यदि आवश्यक है। Js अनुकूलक इसका सही उपयोग करेगा। वैश्विक चर से दूर रहने के लिए Requ.js दस्तावेज़ बहुत स्पष्ट है।

+0

क्या यह तय किया गया था? – singsuyash

उत्तर

8

यह known issue है, कृपया स्टार/वोट दें।

मुद्दा वर्णन से:

डोजो पुस्तकालय लोड हो रहा है मॉड्यूल dojo.require के बजाय के लिए एएमडी के प्रारूप को परिभाषित() में स्विच()। पहले मैं घोषणा पर कूदने के लिए dojo.require ('path.to.someJs') पर Ctrl + B का उपयोग करने में सक्षम था। यह नए प्रारूप परिभाषित (['path/to/someJs]', ...) पर काम नहीं करता है।

चूंकि चाइचर्म, वेबस्टॉर्म, पीएचस्टॉर्म और इंटेलिजे आईडीईए एक ही जावास्क्रिप्ट प्लग-इन साझा करते हैं, यह समस्या आपके द्वारा उपयोग किए जा रहे उत्पाद पर भी लागू होती है। जब तक यह बग ठीक नहीं हो जाता तब तक आप वर्णित समस्या का पालन करना जारी रखेंगे। असुविधा के लिए खेद है।

//foo.js 
define(function(require, exports, module) { 
    //use exports to expose properties for code navigation in other modules 
    exports.bar = function() {} 
}); 

जाहिर है, यह भले ही काम करता है:

+3

जेटब्रेन ने इस मुद्दे पर मूलभूत बातें लागू की हैं, हालांकि, वे अभी भी पथ कॉन्फ़िगरेशन का समर्थन नहीं करते हैं (आप सापेक्ष पथ तक सीमित हैं), और आपको मॉड्यूल पर जाने के लिए स्वयं को परिभाषित करने पर क्लिक करना होगा। :( –

+0

इस पर कोई अपडेट? – cdeszaq

+0

यह वेबस्टॉर्म 8 में सुधार कर रहा है। सुविधाओं के लिए पूछा गया * उपयोग करें * और * घोषणा पर जाएं * [पहले से ही काम करें] (http://stackoverflow.com/a/21954895/623816), refactoring अभी भी कुछ सुधार की जरूरत है। –

3

WebStorm (कम से कम 6.0.2) RequireJs अगर आप निर्यात और मॉड्यूल तर्क CommonJs wrapper के साथ अपने मॉड्यूल तय कर रहे हैं और प्रयोग के साथ कोड नेविगेशन का समर्थन करता इसे का उपयोग मॉड्यूल CommonJs आवरण प्रारूप का प्रयोग नहीं करता:

define(['./foo'], function(foo) { 
    foo.bar(); //code navigation works here 
} 

अन्य IDEs का उपयोग करते हैं एक ही जावास्क्रिप्ट प्लग-इन के रूप में CrazyCoder ने कहा, यह रूप में अच्छी तरह से उनके नए विज्ञप्ति पर काम कर सकते हैं।

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