मेरे पास एक नेस्टेड-व्यू सेटअप है जो मेरे आवेदन में कुछ गहरा हो सकता है। ऐसे तरीकों का एक समूह है जो मैं उप-विचारों को शुरू करने, रेंडर करने और उन्हें जोड़ने के बारे में सोच सकता था, लेकिन मैं सोच रहा हूं कि सामान्य अभ्यास क्या है।
यहाँ एक जोड़ी है जिसके बारे में मैंने सोचा है:
initialize : function () {
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template());
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
पेशेवरों: आपको सही डोम ऑर्डर को बनाए रखने के बारे में चिंता करने की ज़रूरत नहीं है। विचारों को प्रारंभिक रूप से आरंभ किया जाता है, इसलिए रेंडर फ़ंक्शन में सभी को एक साथ करने के लिए उतना नहीं है।
विपक्ष: आप फिर से प्रतिनिधि (), जो महंगा हो सकता है के लिए मजबूर कर रहे हैं? पैरेंट व्यू का रेंडर फंक्शन सबव्यू रेंडरिंग के साथ क्लैट किया जाता है जो कि होना चाहिए? आपके पास tagName
तत्वों को सेट करने की क्षमता नहीं है , इसलिए टेम्पलेट को सही टैगनाम बनाए रखने की आवश्यकता है।
दूसरा रास्ता:
initialize : function () {
},
render : function () {
this.$el.empty();
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
this.$el.append(this.subView1.render().el, this.subView2.render().el);
}
पेशेवरों: आपको घटनाओं को फिर से सौंपने की ज़रूरत नहीं है। आपको ऐसे टेम्प्लेट की आवश्यकता नहीं है जिसमें केवल खाली प्लेसहोल्डर हों और आपके टैगनाम में वापस दृश्य द्वारा परिभाषित किया गया हो।
विपक्ष: अब आपको सही क्रम में चीजों को जोड़ना सुनिश्चित करना होगा। पैरेंट व्यू का रेंडर अभी भी सबव्यू रेंडरिंग द्वारा क्लैट किया गया है।
एक onRender
घटना के साथ :
initialize : function () {
this.on('render', this.onRender);
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
पेशेवरों: सबव्यू लॉजिक अब दृश्य की render()
विधि से अलग हो गया है ।
एक onRender
घटना के साथ :
initialize : function () {
this.on('render', this.onRender);
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1 = new Subview();
this.subView2 = new Subview();
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
मैंने इन सभी उदाहरणों में अलग-अलग प्रथाओं के मिश्रण का मिलान किया है (इसलिए इसके बारे में खेद है) लेकिन वे क्या हैं जिन्हें आप रखेंगे या जोड़ेंगे? और आप क्या नहीं करेंगे?
प्रथाओं का सारांश:
- में
initialize
या में तुरंत साक्षात्कारrender
? render
या में सभी उप-दृश्य प्रतिपादन तर्क प्रदर्शन करेंonRender
?- का उपयोग करें
setElement
याappend/appendTo
?
close
तरीका है और जो onClose
बच्चों को साफ करता है, लेकिन मैं सिर्फ इस बात को लेकर उत्सुक हूं कि उन्हें पहले स्थान पर कैसे प्रस्तुत किया जाए।
delete
जेएस में delete
C ++ से समान नहीं है । यदि आप मुझसे पूछें तो यह एक बहुत खराब नाम वाला कीवर्ड है।