2012-04-04 14 views
5

से बंधे नहीं हैं, मैं रीढ़ की हड्डी-बॉयलरप्लेट का उपयोग कर रहा हूं, जिसे आप here पा सकते हैं।backbone.js एप्लिकेशन विस्तृत फ़ंक्शन जो किसी विशिष्ट नियंत्रक/मॉडल

मैं सोच रहा था वैश्विक कार्यक्षमता, जो स्पष्ट रूप से किसी भी विशिष्ट संग्रह, मॉडल, दृश्य से बंधा नहीं है, आदि जोड़ने के बारे में एक उदाहरण है एक 'लॉगआउट' समारोह है, जो इस प्रकार दिखाई देंगे होगा:

var logout = function(){ 
    // Clear Favorites 
    // Handle asynchronous logging (all in-app logs are sent to the server at logout) 
    // Redirect to the login page 
    // Do other cleanup 
} 

मूलतः, यह Favorites, Events, Logs, Users, और आवेदन Router

आप रीढ़-बॉयलरप्लेट में main.js फ़ाइल को देखें, तो मैं इन कार्यों को जोड़ने की है सहित कई मॉडल/संग्रह, संभाल लेंगे शीर्ष पर (लाइन 13) इस तरह:

function(namespace, $, Backbone, Example){ 

    // BEGIN MY APP LOGIC 
    namespace.app.logout = function(){ 
    // Do logout here 
    }; 
    // END MY APP LOGIC 

    var Router = Backbone.Router.extend({ 

यह ठीक काम करता है, लेकिन एप्लिकेशन तर्क जल्दी से नियंत्रण से बाहर हो सकता है। मेरा सवाल है, इस कोड को व्यवस्थित करने का एक बेहतर तरीका क्या होगा? अगर मेरे पास Utils मॉड्यूल था और मॉड्यूल का उपयोग करता है, तो क्या यह अधिक समझ में आता है?

चीयर्स!

उत्तर

8

टीएलडीआर: http://addyosmani.github.com/backbone-fundamentals/ उन्नत अनुभाग।

इसे संभव बनाएं, फिर इसे सुंदर बनाएं, फिर इसे तेज़ बनाएं।

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

मैं requ.js का उपयोग करता हूं, लेकिन रीढ़ की हड्डी-बॉयलरप्लेट नहीं (बीबी में एएमडी शाखा भी है)। जिस तरह से मैंने अपना ऐप व्यवस्थित किया है, वही है जैसा आपने वर्णन किया है, मेरे पास एक यूटिल मॉड्यूल है जिसमें सामान्य उद्देश्य ऐप सामान है। मैं फिर यूटिल मॉड्यूल में ऑथ, अधिसूचना, और दिनांक स्वरूपण सामग्री जोड़ता हूं। मैं तब भी यूटिल मॉड्यूल को शामिल करता हूं जहां भी मैं आलसी हूं और अपने सभी उपयोग कार्यों को उपलब्ध करना चाहता हूं।

के बाद से वे सब केवल मॉड्यूल रहे हैं/mixins, मैं भी किसी एक मॉड्यूल में अधिकार का/अधिसूचना/तिथि मॉड्यूल शामिल कर सकते हैं मैं उन्हें जरूरत है।

+0

यह वास्तव में स्मार्ट है। एक बात मुझे एहसास हुआ है कि, प्रारंभिक अनुकूलन की तरह, प्रारंभिक अमूर्तता भी अक्सर, बुराई होती है! – starsinmypockets

3

मैंने अपने backbone.js एप्लिकेशन में एक ही प्रश्न के साथ संघर्ष किया है। जो मैंने समाप्त किया वह आपके द्वारा सुझाए गए कार्यों के समान था, विशिष्ट वैश्विक कार्यों के साथ एक दृश्य बना रहा था, (एक मॉड्यूल मॉड्यूल की तरह)।

यदि आप इस "उपयोग" श्रेणी के संदर्भों को संदर्भित करने के संदर्भ में रखना चाहते हैं, तो आप घटना कतार और संदेशों के आधार पर प्रक्रिया से जुड़ सकते हैं। उदाहरण के लिए, लॉगआउट फ़ंक्शन के लिए, आप ईवेंट कतार में "लॉगआउट" संदेश पोस्ट कर सकते हैं और "उपयोग" दृश्य के भीतर से बाध्य कर सकते हैं। इस तरह से कोई फर्क नहीं पड़ता कि इसे कहां बुलाया गया है, संदेश उचित कार्य के लिए पारित किया जाएगा। लॉगआउट फ़ंक्शन को कॉल करने के लिए, आपको ईवेंट कतार में "लॉगआउट" संदेश पोस्ट करने की आवश्यकता होगी।

यदि आपकी कक्षा बहुत बड़ी हो जाती है, तो यह भ्रमित हो सकती है, लेकिन मैं केवल उन कार्यों को रखने की सिफारिश करता हूं जो वैश्विक स्तर पर आवश्यक हैं।

अद्यतन: एक अधिक मजबूत समाधान के रूप में, आप सीधे अपने रीढ़ की हड्डी में अपने उपयोगिता कार्यों का निर्माण कर सकते हैं। प्रलेखन में कहा गया है:

"क्योंकि यह, (रीढ़ की हड्डी) आपके आवेदन के लिए आधार के रूप में कार्य करता है, तो आप इसे फिट करने के तरीके में विस्तार और बढ़ाने के लिए हैं - संपूर्ण स्रोत कोड को आसान बनाने के लिए एनोटेट किया गया है तुम्हारे लिए।"

मुझे पता चला है कि रीढ़ की हड्डी की वस्तु में जोड़कर आप लॉगआउट जैसे चीजों को शामिल करने के लिए अंतर्निहित उपयोगिता फ़ंक्शन, (नो कॉन्फ्लिक्ट और सेटडॉम लाइब्रेरी) को बढ़ा सकते हैं। किसी भी जावास्क्रिप्ट फ़ंक्शन की तरह, आप आवश्यक चर प्रारंभ कर सकते हैं और फिर उन्हें

Backbone.logout(); 
3

मैं उन्हें एप्लिकेशन दृश्य में डाल दूंगा। जब यह बहुत बड़ा हो जाता है (मेरी व्यक्तिगत सीमा 600-800 लाइनें होती है), तो आप आमतौर पर उन वैश्विक तरीकों को समूह में कुछ तर्कसंगत उचित सहायक मॉड्यूल में समूहित करने में सक्षम होते हैं ताकि आपको एप्लिकेशन को पर्याप्त रूप से छोटा रखा जा सके।

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