2012-06-01 17 views
16

Ho letto la documentazione di Ember e vedo un'incoerenza in cui il metodo _super viene chiamato quando si esegue l'override di init.Ember.js dove chiamare this._super()

Questa è la più comune ed è quello che ho usato finora

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

ieri sera stavo leggendo attraverso this write up e ho visto un esempio facendo questo

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

In realtà è stato un Ember.ContainerView nello snippet di codice.

Qualcuno può spiegarlo? Il mio codice OCD sta agendo e non posso andare avanti finché non lo so.

risposta

13

Nella documentazione legata

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

_super() viene chiamato dopo il descriptionView viene creata e spinto sul matrice childViews.

Questo perché l'implementazione della superclasse init sta per prendere l'array childViews e fare cose con esso. Se hai chiamato _super prima di aggiungere il descriptionView alla matrice, non sarebbe ottenere elaborati con qualsiasi init fa ....

sto inferire, ma questo è il modo in cui funziona in Sproutcore, da cui deriva Ember, così Penso che sia probabilmente lo stesso.

+0

Ah sì, chiamare il 'super'' super' dopo aver inizializzato l'array 'childView' rimuoverà il sovraccarico di dover eseguire il rendering due volte. –