Description
Request
Deprecate this:
Ember.Component.extend({
someRandomName: Ember.on('didInsertElement', function() {
})
});
In favor of:
Ember.Component.extend({
didInsertElement: function() {
this._super(...arguments);
}
});
Reasoning
Ember.Component.extend({
doA: Ember.on('willInsertElement', function() { },
doB: Ember.on('willInsertElement', function() { }
})
The order in which doA
and doB
happens is unknown. This code might be the result of a refactoring. Or, a developer new to the code base not noticing that the event is being observed already. Subtle bugs can be easily introduced.
It is also easier to read and understand the behavior of a component if there is a single place where all the event dependent code is executed. Tracking down all the different pieces of code that are executed at different moments in the lifecycle is cumbersome and can be easily avoided by using overrides.
One argument that might come up against overrides is:
what if people forgets to call super? that can introduce bugs too!
It is easier to know that you always have to have that call inside the hook, there is determinism. Whereas keeping track of all the Ember.on
s that might be cohabiting an object is not straightforward. When reading the code, you have to keep a mental map of all the pieces that might be executed by a hook; the cognitive load is high.