Editor#_configColumns was written with the expectation that _configColumns() would only be invoked once when the columns are set. ColumnSet#configStructure calls _configColumns for each column set, which causes Editor to lose track of editor widgets when the _alwaysOnWidgetColumns array is destructively initialized.
This PR moves initialization of the _alwaysOnWidgetColumns array into configStructure to ensure it is initialized when appropriate and not destructively over-written. Analysis of the sequence of events when a grid is created with both ColumnSet and Editor points to this as the best point in the code to land the fix despite the fact that it only works if ColumnSet is mixed in before Editor. To enforce this mixin order the ColumnSet constructor will throw an error if it detects that Editor's constructor has already executed. This requirement is also added to the documentation for ColumnSet.
Editor#_configColumns
was written with the expectation that_configColumns()
would only be invoked once when the columns are set.ColumnSet#configStructure
calls_configColumns
for each column set, which causesEditor
to lose track of editor widgets when the_alwaysOnWidgetColumns
array is destructively initialized.This PR moves initialization of the
_alwaysOnWidgetColumns
array intoconfigStructure
to ensure it is initialized when appropriate and not destructively over-written. Analysis of the sequence of events when a grid is created with bothColumnSet
andEditor
points to this as the best point in the code to land the fix despite the fact that it only works ifColumnSet
is mixed in beforeEditor
. To enforce this mixin order theColumnSet
constructor will throw an error if it detects thatEditor's
constructor has already executed. This requirement is also added to the documentation forColumnSet
.Fixes #1412