2011-11-29 19 views
12

मैं जो एक माता पिता और कई बच्चे दृश्य दिखाई देते हैं Backbone.js में ऐप्स बनाने रहा हूँ। बच्चे के विचारों में वे लिंक होते हैं जिन्हें वे सुनते हैं और एक फ़ंक्शन करते हैं।बैकबोन.जेएस में दूसरे प्रस्तुत करने के बाद घटनाएं क्यों नहीं चल रही हैं?

माता-पिता बच्चों के विचारों के सभी की एक सूची संग्रहीत करता है।


$(this.el).html(html); 
for (var i = 0; i < this.views.length; i++){ 
    $('.children', this.el).append(this.views[i].render().el); 
} 

उत्तर: समारोह प्रस्तुत करना है, यह अपने आप एचटीएमएल कंप्यूटिंग किया जाता है के बाद, यह निम्नलिखित करता है समस्या यह है कि मैं प्रस्तुत करना दौरान लिंक बनाने गया था। अर्थात। पहले प्रस्तुत करने पर (जिसे init से बुलाया गया था) घटना सफलतापूर्वक लिंक से जुड़ी हुई थी। हालांकि, चूंकि प्रस्तुत करने के सभी निम्नलिखित कॉल पूरे तत्व को फिर से बनाते हैं, इसलिए नए लिंक में हैंडलर को बाध्य नहीं किया गया था। यह रेंडर करने के लिए this.delegateEvents() जोड़ने

उत्तर

13

आप शायद jQuery remove समारोह का उपयोग कर रहे कहीं देखने से subviews दूर करने के लिए की @Tom Tu समाधान के माध्यम से हल किया गया था - यह स्वचालित रूप से सभी घटनाओं तत्व (this.el) करने के लिए बाध्य निकल जाता है - events ऑब्जेक्ट में सेट करें। आप उपयोग कर सकते हैं में this.delegateEvents() विधि subviews के प्रस्तुत करना आप detach विधि बजाय events वस्तु या उपयोग jQuery में सेट घटना बाइंडिंग को हटाने (link) के बिना डोम से तत्वों को दूर करने के घटना प्रतिनिधियों rebind करने टेम्पलेट प्रस्तुत करना के बाद। delegateEvents विधि काफी महंगा है और इस तरह मैं तत्वों है कि आप अगर आप subviews की लंबी सूची प्रदान कर रहे हैं पुन: उपयोग करना चाहते हैं दूर करने के लिए detach विधि की सलाह देते हैं - अप्रासंगिक अगर यह सिर्फ विचारों के एक जोड़े हैं।

अन्य संभावना यह है कि आपने events ऑब्जेक्ट गलत सेट किया है - प्रदान की गई कोड की मात्रा से बताना मुश्किल है, लेकिन मैं पहले शर्त पर शर्त लगाता हूं।

+0

थोड़ा अधिक जानकारी के कहा, आशा है कि यह –

+0

एक बहुत अच्छी सोचा है कि मदद करता है, लेकिन मैं निकालने जोड़ा उपरोक्त कोड इसके अलावा, घटनाओं को गलत सेट नहीं किया जा सकता है, या यह पहली जगह में आग नहीं होगा। – chacham15

7

वास्तव में एक आम चुनौती। इस सवाल का भविष्य ढूँढ़ने के लिए, यहाँ दृश्य प्रतिपादन के बारे में जो शानदार लेख है:

तुम बस यह सुनिश्चित करें कि delegateEvents किसी भी समय .html अपने subviews पर घटनाओं rebind करने कहा जाता है बनाने की जरूरत है() चलाता है। और क्योंकि रीढ़ की setElement delegateEvents पहले से ही कहता है, एक त्वरित समाधान ऐसा दिखाई दे सकता ...

http://ianstormtaylor.com/rendering-views-in-backbonejs-isnt-always-simple/

+0

वही है जो मैं खोज रहा था। धन्यवाद! –

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