में उप-दृश्य प्रस्तुत करने और जोड़ने के लिए मेरे पास एक नेस्टेड-व्यू सेटअप है जो मेरे आवेदन में कुछ हद तक गहरा हो सकता है। उप-विचारों को आरंभ करने, प्रतिपादन और संलग्न करने के बारे में सोचने के तरीकों का एक समूह है, लेकिन मुझे आश्चर्य है कि आम अभ्यास क्या है।Backbone.js
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();
}
सकारात्मक: subview तर्क अब देखने के 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
में
- का दृष्टांत subviews?
render
में याonRender
में सभी सब-व्यू रेंडरिंग तर्क करें?setElement
याappend/appendTo
का उपयोग करें?
मैं बिना हटाए नए के बारे में सावधान रहूंगा, आपको वहां मेमोरी लीक मिल जाएगी। – vimdude
चिंता न करें, मेरे पास 'क्लोज़' विधि है और 'ऑनक्लोस' है जो बच्चों को साफ करती है, लेकिन मैं केवल पहले स्थान पर उन्हें तुरंत कैसे प्रस्तुत करना और प्रस्तुत करना चाहता हूं। –
@abdelsaid: जावास्क्रिप्ट में, जीसी स्मृति की deallocation संभालती है। जेएस में 'हटाएं' सी ++ से 'हटाएं' जैसा नहीं है। यदि आप मुझसे पूछें तो यह बहुत खराब नामित कीवर्ड है। –