2012-04-21 8 views
16

मैं वर्तमान में एक विशाल रीढ़ की हड्डी ऐप (फेसबुक क्लोन) का निर्माण कर रहा हूं।Backbone.js बड़े mutli पेज ऐप, पेज संक्रमणों को साफ रूप से विनाश, निर्माण आदि का प्रबंधन

पिछले कुछ दिनों में, कैसे सब कुछ करने के लिए रोब Conery के उत्कृष्ट ट्यूटोरियल (आवश्यक देखने अपने MVC 3 और बी बी http://tekpub.com/productions/mvc3 साथ शुरू करते हैं)

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

मैं स्मृति लीक मुद्दों के साथ delt लेने के बाद, मैं निकल और जब पेज से मेरे मॉडल/संग्रह/दृश्य हटाने बनाकर, Switching views in backbone for navigating between pages - whats the right way?

लेकिन एक तरफ इस सामग्री से, वहाँ कार्यों की एक पूरी लोड है कि जब मैं पृष्ठों के बीच स्विच करता हूं तो मैं करना चाहता हूं। अनिवार्य रूप से पृष्ठ के हिस्सों को हटाकर जोड़ना। यह सबकुछ हटाने के बजाए थोड़ा अधिक जटिल है, मैं उस पृष्ठ के बिट्स को केवल हटाना/नष्ट करना चाहता हूं, जिसे मैं बदलना चाहता हूं, उस संक्रमण के आधार पर बदलना होगा।

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

+1

क्या यह सबसे अच्छा जवाब है? https://github.com/derickbailey/backbone.marionette –

+0

या शायद यह, http://lostechies.com/derickbailey/2012/03/22/managing-layouts-and-nested-views-with-backbone-marionette/ # टिप्पणी -2375 –

+0

मैरियनेट एक अच्छा ढांचा है। आप रीढ़ की भी जांच कर सकते हैं backbone.layoutmanager https://github.com/tbranyen/backbone.layoutmanager#readme – Karthik

उत्तर

9

कठपुतली निश्चित रूप से जाने के लिए रास्ता नहीं है। विशेष रूप से, Marionette.Layout पूरे पृष्ठ को फिर से प्रतिपादन के बिना विशिष्ट क्षेत्रों बाहर गमागमन लिए बढ़िया है। Derick के Example Apps के कुछ ढांचे के साथ परिचित हो की जाँच करें।

मैं राउटर से दूर रहने की अनुशंसा करता हूं जब तक कि आप अपने पुराने ऐप को सादे पुराने कार्यक्रमों का उपयोग करके काम नहीं कर लेते। फिर मूल के बाद राउटर समर्थन जोड़ें। सहयोगी राउटर को आपके ऐप की स्थिति को प्रतिबिंबित करने के लिए तारित किया जाना चाहिए, लेकिन आपको अपने नियंत्रक होने पर इस पर निर्भर नहीं होना चाहिए।

एक तरफ के रूप में, मैं एक बड़े बहु-मॉड्यूल बैकबोन प्रोजेक्ट पर रिक्यूरीजेएस का उपयोग कर रहा हूं और यह एक देवता रहा है। यह बीबी समुदाय में विवादास्पद है, लेकिन यह देखने लायक है कि आपके पास बहुत से अंतर-निर्भर घटक होंगे और आप सभी निर्भरताओं को सभी निर्भरताओं को संभालने देना चाहते हैं।

+1

डेव की तरह इस जवाब में इंगित किया गया, लेआउट मदद करेगा। विशेष रूप से, Marionette.Region ऑब्जेक्ट दृश्यों को स्वैप करते समय क्लीनअप करेगा। लेआउट वे विचार हैं जिनमें उनमें क्षेत्र शामिल हैं। –

+0

धन्यवाद दोस्तों, मैं अभी marionette में गहरी घुटने हूँ। यह पहले रीढ़ की हड्डी के साथ गियरिंग, ईंट की दीवारों को मारने, और फिर सभी को हल करने का एक अजीब सप्ताह रहा है। मैरियनेट के साथ थोड़ी देर के लिए यह वर्ग एक पर वापस आने जैसा महसूस किया, लेकिन मैंने जो किया वह मेरे स्थानीय पर्यावरण में http://bbclonemail.heroku.com/#inbox को दोहराया गया था, और इसके भीतर एक तीसरा ऐप रखने के लिए इसे अभी विस्तारित कर लिया है (मेल ऐप क्लोनिंग) इस तरह के एक साफ तरीके से सब कुछ बिछाने के लिए वास्तव में अच्छा लगता है। क्या आपको लगता है कि इसका उपयोग करने के लिए कोई डाउनसाइड्स हैं? –

+1

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

0

मैं अपने एक ही समस्या थी और साझा करने के लिए मैं इसे कैसे हल चाहता था, इसलिए मैं अपने पृष्ठ संक्रमण परंपरा का उपयोग करके Backbone.js डॉक्स से फिर से तैयार किया गया है टूडू ऐप्स उदाहरण:

http://ahamlett.com/Backbone.localStorage/

मैं हेवन मेमोरी लीक के लिए इसका परीक्षण नहीं किया गया है, लेकिन अगर ऐप के राउटर की सेटव्यू विधि में .remove() से पहले कुछ कॉल करें .unbind()।

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