2012-04-22 9 views
6

मैं थोड़ी देर के लिए जावास्क्रिप्ट में प्रोग्रामिंग किया गया है साथ नामस्थान विस्तार करने के लिए। हाल ही में मैंने काफी विशाल jQuery प्रोजेक्ट बनाया है और मॉड्यूल पैटर्न को इस अद्भुत आलेख में वर्णित किया है: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depthकैसे EmberJS

यह सब ठीक और बेवकूफ हो गया और कोड चिकना और प्रबंधनीय दिखता है, लेकिन मुझे लगा कि यह बेहतर हो सकता है। मैं दिन खर्च कुछ जावास्क्रिप्ट चौखटे की तलाश में, ज्यादातर लोगों को लगता है कि कर दिया है:

  • Have यूआई बाध्यकारी समर्थन
  • एक templating प्रणाली है
  • jQuery के साथ काम कर सकते हैं
  • मुझे एक में अपने कोड का आयोजन मदद उसी तरह के रूप में मैं मॉड्यूल पैटर्न

मैं AngularJS, KnockOutJS, SpineJS, JavascriptMVC, आदि एक है कि वास्तव में बाहर स्टिक किया जैसे चौखटे भर में ठोकर खाई किया है के साथ किया था - और काफी सराहना की गई थी - EmberJS था।

मैं इसे एक शॉट देने का फैसला किया है, लेकिन यह आसान नहीं रहा है। एम्बरजेएस के लिए ट्यूटोरियल की उपलब्धता बहुत सीमित है। लंबे समय तक प्रयास करने के बाद मैं कुछ सामान चलाने में कामयाब रहा और मुझे एम्बरजेएस क्या पसंद आया! मैं एक एंबर नाम स्थान (Ember.Application.create से बनी) कैसे बढ़ा सकते हैं: जो भी मेरे सवाल है - केवल एक बात मैं यह पता लगाने नहीं कर पा रहे है?

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

मैं सिर्फ करते हैं: और

MyNamespace = Ember.Application.create(); 
MyNamespace.Core = Ember.Application.create(); 
MyNamespace.Util = Ember.Application.create(); 

या कुछ?

उत्तर

10

आप नहीं घोंसला Ember.Namespace के (जहां Ember.ApplicationEmber.Namespace का एक उपवर्ग जा रहा है), इस मुद्दे #683 देख सकते हैं।

कोर योगदानकर्ताओं में से एक टोम डेल ने जटिल अनुप्रयोगों के लेआउट के बारे में एक दिलचस्प जवाब जोड़ा, comment देखें।

तो आप या तो सिर्फ App = Ember.Application.create() उपयोग करें और यह नाम स्थान के तहत अपने नियंत्रकों, विचार, आदि बना सकते हैं। या आप यह कर सकते हैं - अगर आप अन्य परियोजनाओं/अनुप्रयोगों में कुछ कोड का पुन: उपयोग करना चाहते हैं - विभाजित नाम स्थान का इस तरह:

Util = Ember.Namespace.create({ 
    importantNames: 'Einstein'.w() 
}); 

Core = Ember.Namespace.create({ 
    sqrt: function(x) { return Math.sqrt(x); } 
}); 

App = Ember.Application.create(); 

... 

App.myListController = Ember.Object.create({ 
    importantNamesBinding: 'Core.importantNames', 
    sqrtBinding: 'Util.sqrt' 
}); 

एक Ember.ApplicationEmber.Namespace फैली हुई है, और घटनाओं से निपटने के बारे कार्यक्षमता (क्लिक करें, ...) कहते हैं। क्यों इस सिर्फ एक Ember.Namespace है कि है, आपको लगता है कि सामान की जरूरत नहीं होगी अपने Core और Util नाम स्थान में - यह सामान जब आप विचारों के साथ एक आवेदन पत्र लिखने उपयोगी है।

+0

सबसे पहले, आप अपने तेज उत्तर के लिए, बहुत विस्तृत धन्यवाद। दूसरा, मुझे वास्तव में गैर-नेस्टेड नामस्थानों पर ध्यान नहीं दिया जाता है, मैं केवल नामस्थान जैसी वस्तु बनाने के लिए सही फ़ंक्शन कॉल की तलाश कर रहा था, जो एम्बर.Namespace.Create है! यदि कुछ भी हो, तो मैं एम्बर एप्लिकेशन के शीर्ष पर नेमस्पेस (इसे घोंसला या नहीं) रखने के लिए अपने मॉड्यूल पैटर्न दृष्टिकोण के साथ चला सकता था, लेकिन यह सिर्फ गंदा है। –

+0

बस कोशिश करने के बाद, मुझे पता चला कि घोंसले के नाम वास्तव में काम करते हैं। लोकप्रिय मांग के कारण शायद हाल के संस्करण में यह बदल गया है? –

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