2012-03-20 24 views

उत्तर

18

जहाँ तक मुझे पता है - none is fired। स्रोत कोड में रेंडर फ़ंक्शन खाली है।

The default implementation of render is a no-op

मैं आवश्यक होने पर इसे मैन्युअल रूप से ट्रिगर करने की अनुशंसा करता हूं।

+1

चियर्स, अपने समाधान –

+7

@StefanSchmidt btw मुझे :) के लिए बाहर काम किया -। अपने आप को backbone.js स्रोत कोड पढ़ने की कोशिश । यह काफी पठनीय है। –

+1

हाँ ... यह है कि मैंने आपकी पोस्ट के बाद क्या पता लगाया। इससे पहले कि मैं थोड़ा डरा था। थोडा जावास्क्रिप्ट नोब: डी –

-2
constructor: function(){ 
    Backbone.View.call(this, arguments);  
    var oldRender = this.render 
    this.render = function(){ 
     oldRender.call(this) 
     // this.model.trigger('xxxxxxxxx') 
    }  
} 

इस http://jsfiddle.net/8hQyB/

+1

इसके लिए आपको 'कन्स्ट्रक्टर' को ओवरराइट करने की आवश्यकता नहीं है। – mate64

+0

कन्स्ट्रक्टर बिंदु नहीं है। आप इसे मैन्युअल रूप से ट्रिगर भी कर सकते हैं या jquery $ का उपयोग कर सकते हैं। @ cept0 – user873792

35

मैं इस post जो लगता है दिलचस्प

var myView = Backbone.View.extend({ 

    initialize: function(options) { 
     _.bindAll(this, 'beforeRender', 'render', 'afterRender'); 
     var _this = this; 
     this.render = _.wrap(this.render, function(render) { 
      _this.beforeRender(); 
      render(); 
      _this.afterRender(); 
      return _this; 
     }); 
    }, 

    beforeRender: function() { 
     console.log('beforeRender'); 
    }, 

    render: function() { 
     return this; 
    }, 

    afterRender: function() { 
     console.log('afterRender'); 
    } 
}); 
+1

आपको इस पंक्ति की आवश्यकता क्यों है: '_.bindAll (यह, 'पहले प्रस्तुतकर्ता', 'प्रस्तुत करें', 'बाद में');'? – pilau

+2

@ पिलौ - देखें [यह] (http://blog.bigbinary.com/2011/08/18/understanding-bind-and-bindall-in-backbone.html) _.bind और _.bindAll को समझने के लिए। इससे मुझे मदद मिली, उम्मीद है कि यह आपकी भी मदद करेगा। – arunkjn

+1

मुझे पता है कि यह क्या करता है, मैं इस बारे में पूछताछ कर रहा हूं कि आपको इसका उपयोग क्यों करना है, क्योंकि वे (फ़ंक्शंस), सभी दृश्य वस्तु को विस्तारित कर रहे हैं? – pilau

22

या आप निम्नलिखित है, जो है क्या बैकबोन कोड (ऑब्जर्वर पैटर्न की तरह लग रहे करने के लिए माना जाता है कर सकते हैं में भाग की तरह, उर्फ पब/उप)। यह जाने का रास्ता है:

var myView = Backbone.View.extend({ 
    initialize: function() { 
     this.on('render', this.afterRender); 

     this.render(); 
    }, 

    render: function() { 
     this.trigger('render'); 
    }, 

    afterRender: function() { 
    } 
}); 

संपादित करें: this.on('render', 'afterRender'); काम नहीं करेगा - क्योंकि Backbone.Events.on केवल कार्यों स्वीकार करता है। .on('event', 'methodName'); जादू Backbone.View.delegateEvents द्वारा संभव बनाया गया है और यह केवल डीओएम घटनाओं के साथ उपलब्ध है।

+0

अनकॉटेड टाइप त्रुटि: ऑब्जेक्ट के बाद रेंडर में कोई विधि नहीं है' कॉल ' – Trip

+1

@ टिप फिक्स्ड। ऐसा नहीं लगता था कि इससे कोई फर्क नहीं पड़ता लेकिन स्पष्ट रूप से यह अकेले विधि के नाम से काम नहीं करता है। अब मुझे पता लगाना है कि क्यों। – pilau

+0

मैंने अपना जवाब अपडेट किया, उम्मीद है कि किसी को यह उपयोगी लगेगा। – pilau

-1

इंटिलाइजेशन को प्रस्तुत करने के लिए मैन्युअल रूप से इवेंटहैंडर जोड़ने के बजाय आप ईवेंट को अपने दृश्य के 'ईवेंट' अनुभाग में भी जोड़ सकते हैं। http://backbonejs.org/#View-delegateEvents

उदा।

events: { 
    'render': 'afterRender' 
} 

afterRender: function(e){ 
    alert("render complete") 
}, 
+0

यह काम नहीं करता है। प्रतिनिधि घटनाएं डोम पर होने वाली घटनाओं का संदर्भ देती हैं। दृश्य ऑब्जेक्ट पर कॉलबैक नहीं। – louism2

+0

'घटनाओं' का उपयोग 'डीओएम घटनाओं के लिए घोषणात्मक कॉलबैक' के लिए किया जाता है, देखें [रीढ़ की हड्डी/# व्यू-प्रतिनिधि एवेन्ट्स] (http://documentcloud.github.io/backbone/#View-delegateEvents) – RainChen

2

आप Marionette का उपयोग कर कर रहे हैं तो, कठपुतली विचारों पर show और render घटनाओं कहते हैं। उदाहरण के लिए this StackOverflow question देखें।

एक तरफ ध्यान दें पर, कठपुतली अन्य उपयोगी सुविधाओं है कि आप में रुचि हो सकती का एक बहुत कहते हैं

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