2011-11-26 12 views
5

मुझे खुद को एक रीढ़ की हड्डी हैकर कॉल करने की हिम्मत है। मुझे पता है कि ढांचा क्या कर सकता है, और इसकी सीमाएं कहां हैं। मुझे कुछ templating ढांचे के साथ कुछ अनुभव भी है।रेंडर विधि का उपयोग कर हर कोई अभी भी माता-पिता के विचारों का निर्माण क्यों कर रहा है?

मैंने कई ट्यूटोरियल देखे हैं जहां लोग जटिल और घोंसले वाले विचारों को कैसे विकसित करते हैं, और उनमें से अधिकांश टेम्पलेट का उपयोग करके आंशिक रूप से आंशिक रूप से टेम्पलेट का उपयोग करते हैं, और फिर माता-पिता के दृश्य को प्रस्तुत करने के लिए, टेम्पलेट बच्चे को गठबंधन करने के लिए विचार

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

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

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

कोई और इस बारे में सोच रहा है? ऐसा कोई क्यों उपयोग नहीं कर रहा है?

+0

[ट्रिनिटी बारीक से घोंसला वाले दृश्यों के साथ जटिल मार्कअप करता है] (https://github.com/Raynos/trinity)।आप सभी नेस्टेड दृश्यों के लिए बैकबोन व्यू ऑब्जेक्ट्स बनाने के लिए ट्रिनिटी दृश्यों को आसानी से पूर्व प्रक्रिया करते हैं। आपकी अवधारणा के साथ समस्या यह है कि आपको एक सभ्य templating प्रणाली की आवश्यकता है जो शक्तिशाली विरासत की अनुमति देता है, वे दुर्लभ हैं। – Raynos

+5

मुझे लगता है कि यह कहीं और है, यह आपके कोड के साथ एक परिभाषित समस्या नहीं है जिसे हल किया जा सकता है, यह माता-पिता के विचारों के साथ सर्वोत्तम प्रथाओं पर अधिक चर्चा है ... मैं इस प्रकार एक प्रश्नोत्तर से चर्चा के रूप में और अधिक देखता हूं विषय। शायद समुदाय विकी के लिए कुछ? – Sander

+0

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

उत्तर

1

यह ध्यान दिया जाना चाहिए कि रेंडर का उपयोग करना आवश्यक नहीं है और यह मुख्य रूप से कोड में किए गए परिवर्तनों के बाद पुन: प्रस्तुत करने के लिए आरक्षित है। आप सीधे सीएसएस चयनकर्ताओं के आधार पर विचारों को बाध्य कर सकते हैं (इसके लिए दस्तावेज़ देखें)।

इसके अतिरिक्त बैकबोन के लिए एक मॉडल बाध्यकारी एक्सटेंशन है जो डेटा-बाइंडिंग को बहुत सरल बनाता है और आवश्यक 'मैनुअल' श्रम को कम करता है। शायद आप इस पर एक नजर डालना चाहें।

http://github.com/derickbailey/backbone.modelbinding

अंत में मैं माता-पिता-बच्चे के सम्बन्ध प्रतिपादन के बारे में यह कहना होगा। Do not call the DOM in a loop। यह अविश्वसनीय रूप से अक्षम है और कम से कम एक कारण है कि माता-पिता केवल माता-पिता को विधि प्रस्तुत करने में अभिभावक-बाल संबंध बनाएंगे। प्रत्येक बच्चे को jQuery का उपयोग करके खुद को प्रस्तुत करने के बाद ब्राउज़र के लिए बहुत सारे काम होंगे (यदि आप इसे आधुनिक ब्राउज़र में नहीं देखते हैं तो इसे IE8 में आज़माएं)।

1

मैं मानता हूं कि render विधि में बच्चे के विचारों को तत्काल करने का कोई मतलब नहीं है। हालांकि मैं जब एक बच्चे को देखने के आरंभ, पूरी तरह से प्रक्रिया को स्वचालित करने में संकोच हो जाएगा, क्योंकि मैं अक्सर अतिरिक्त बहस में पास करना चाहते हैं जैसे:

var childCollection = someLogicToCreateTheChildCollection(); 

new ChildView({ 
    collection : childCollection 
}); 

तो, क्या मैं बजाय कर रही अंत किसी भी बच्चे को देखा गया मैं जरूरत पैदा कर रही है initialize में और फिर render में मैं टेम्पलेट प्रस्तुत करता हूं और डीओएम में तत्वों को बाल दृश्य असाइन करता हूं।

इस तरह मेरा रेंडर फ़ंक्शन एक डीओएम ऑर्डर घोषित नहीं करता है (जैसे कई उदाहरण संलग्न करके दिखाए जाते हैं) - टेम्पलेट डीओएम ऑर्डर सेट करता है और केवल setElement().render() बच्चे के विचार प्रस्तुत करता है।

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