Too frequently I see the following problem. Someone creates a new
class and overrides init:
var UsersController = Ember.ArrayController.extend({
init: function() {
// some custom stuff
}
})
export default UsersController;
init is a popular function to override because it is automatically run
after the object is instantiated. It is the only lifecycle hook for
Ember.Object, subclasses of Ember.Object add their own hooks to the
lifecycle but the only one that is guaranteed to be there is init.
The problem is with the above example
the controller is broken. I forgot to make a call to this._super()
which will call the original init from Ember.ArrayController. That
init assigns the proper value to content. (via ArrayProxy)
Instead of overriding init I have been writing functions that are
specific to the logic I want to kick off on object instantiation and
have that function trigger on('init'):
var UsersController = Ember.ArrayController.extend({
doSomething: function() {
// some custom stuff
}.on('init')
})
export default UsersController;
Now I don’t risk messing with the original behavior of the parent class.
Calling up the super chain is a powerful and important feature in
Ember but too often I was forgetting to call it. Now the only time I find
myself overriding init is if I want to disrupt the default instantiating
behavior of the object.