2012-06-01 11 views
16

He estado revisando la documentación de Ember y estoy viendo una incoherencia en donde se llama al método _super al anular init.Ember.js donde llamar a this._super()

Este es el más común y es lo que he estado usando hasta ahora

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

anoche estaba leyendo a través de this write up y vi un ejemplo haciendo esto

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

En realidad, fue una Ember.ContainerView en el fragmento de código.

¿Alguien puede explicar esto? Mi código OCD está actuando y no puedo seguir hasta saber.

Respuesta

13

En la documentación vinculada

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

_super() se llama una vez creada la descripciónVer y empuja sobre la matriz childViews.

Eso es porque la implementación de la superclase init va a tomar la matriz de childViews y hacer cosas con ella. Si se llama a _super antes de añadir el descriptionView a la matriz, que no se la procesada por lo init hace ....

estoy infiriendo, pero esa es la forma en que funciona en SproutCore, de la que se deriva Ember, por lo Creo que es probablemente lo mismo.

+0

Ah sí, al llamar al 'init' de' super' después de inicializar la matriz 'childView' se eliminará la sobrecarga de tener que renderizar dos veces. –