8

के लिए मैरियनेट में लेआउट को समझना मुझे लगता है कि मुझे Marionette.Layout का उपयोग करने का इरादा रखने की मूलभूत गलतफहमी हो सकती है।बैरबोन.जेएस

मैं कुछ इस तरह करने के लिए कोशिश कर रहा हूँ:

enter image description here

लेआउट दो Marinotette.ItemView रों में शामिल हैं: "विस्फोट" ItemView और "Popstar" ItemView। यह लेआउट हमेशा इन विचारों को रोकने के लिए बनाया गया है, तो मैं ऐसा करने की कोशिश की:

var TheLayout = Backbone.Marionette.Layout.extend({ 
    template: '#the=layout-template', 
    regions: { 
     explode: '#explode-region', 
     popstar: '#popstar-region' 
    } 
    initialize:function(options){ 
     _.bindAll(this); 

     var explodeView = new ExplodeView(); 
     this.explode.show(explodeView);  // <-- This throws and exception because the regions are not available yet 

    } 
}) 

लेकिन ऐसा लगता है कि जब तक क्षेत्रों के बाद लेआउट प्रदान की गई है उपलब्ध नहीं हैं। मैंने विचार जोड़ने से पहले this.render() पर कॉल करने का प्रयास किया, लेकिन यह काम नहीं किया। मुझे पूरा यकीन है कि यहां मौलिक समस्या यह है कि मैं गलत परिस्थिति में लेआउट लागू कर रहा हूं।

इस परिस्थिति में मुझे क्या करना चाहिए? Marionette.Layout का उपयोग करने का सही समय कब है?

धन्यवाद!

उत्तर

17

लेआउट के onRender विधि में क्षेत्र के दृश्य दिखाएं। कोड:

var TheLayout = Backbone.Marionette.Layout.extend({ 
    template: '#the=layout-template', 
    regions: { 
     explode: '#explode-region', 
     popstar: '#popstar-region' 
    } 
    onRender: function() { 
     var explodeView = new ExplodeView(); 
     this.explode.show(explodeView); 
    } 
}) 

ध्यान दें कि इस मामले में _.bindAll(this) जरूरत नहीं है।

+1

'_.bindAll (यह) 'के संबंध में मैं अभी भी उलझन में हूं कि किस मामले का उपयोग करना है और किस मामले में नहीं। – CodeRain

+4

मैरियनेट द्वारा सीधे बुलाए जाने वाले अधिकांश तरीकों के लिए, जैसे इवेंट हैंडलर और 'ऑनरेंडर', 'ऑनक्लोस', संदर्भ मैरियनेट द्वारा सही ढंग से सेट किया गया है और आपको 'bindAll' की आवश्यकता नहीं है। अगर कोई और आपकी विधि को कॉल कर रहा है, तो AJAX से एक jQuery कॉलबैक या सीधे jquery का उपयोग करके जुड़ा हुआ ईवेंट कहें, और आप संदर्भ 'यह' अभी भी दृश्य होना चाहते हैं, फिर '_.bindAll (यह,' myfunc ') आपका है दोस्त। –

+0

मेरा दिन बचाया :) – SAR