2012-06-01 12 views
16

मैं एम्बर प्रलेखन के माध्यम से जा रहा हूं और विधि को init ओवरराइड करते समय एक असंगतता देख रहा हूं।Ember.js कहां कॉल करें ._super()

यह सबसे सामान्य है और क्या मैं अब तक

var Foo = Em.Object.extend({ 
    init: function(){ 
     this._super(); 
     // ... my stuff ... 
    } 
}); 

कल रात मैं this write up के माध्यम से पढ़ रहा था का उपयोग कर रहे हैं और देखा एक उदाहरण कर इस

var Bar = Em.Object.extend({ 
    init: function(){ 
     // ... my stuff ... 
     return this._super(); 
    } 
}); 

यह वास्तव में एक था है कोड स्निपेट में Ember.ContainerView

क्या कोई इसे समझा सकता है? मेरा कोड ओसीडी अभिनय कर रहा है और जब तक मुझे पता नहीं चलता तब तक मैं आगे नहीं बढ़ सकता।

उत्तर

13

प्रलेखन में जुड़े हुए बाद descriptionView बनाया है और childViews सरणी पर धकेल दिया जाता है

init: function() { 
    var childViews = this.get('childViews'); 
    var descriptionView = App.DescriptionView.create(); 
    childViews.pushObject(descriptionView); 
    this.addButton(); 
    return this._super(); 
    }, 

_super() कहा जाता है।

ऐसा इसलिए है क्योंकि सुपरक्लास init कार्यान्वयन बच्चे दृश्यों को ले जाने जा रहा है और इसके साथ सामान करता है। आप सरणी descriptionView जोड़ने से पहले _super कहा जाता है, यह जो कुछ भी init करता है के द्वारा संसाधित नहीं हो ....

मैं निष्कर्ष निकालते रहा हूँ, लेकिन यह है कि जिस तरह से यह Sproutcore में काम करता है, जिसमें से एंबर निकला है, तो मुझे लगता है कि यह शायद वही है।

+0

आह हाँ, 'childView' सरणी शुरू करने के बाद 'सुपर' की 'init' को कॉल करने से दो बार प्रस्तुत करने के ऊपरी हिस्से को हटा दिया जाएगा। –