Я не могу понять странное поведение, подкласс виджет планшета
Используя qooxdoo 5.0.2 (или предыдущую версию), я создаю подкласс виджета планшета и переопределяю _onKeyPress
метод. Затем при генерации исходного кода я получаю правильное поведение, но при генерации сборки поведение отличается.
Я упростил свой вопрос с помощью этого примера ниже. Я подкласс виджет таблицы и переопределить _onKeyPress
метод С ТО ЖЕ КОДОМ из источника виджета таблицы qooxdoo 5.0.2. Запустите пример, отредактируйте ячейку и нажмите Enter.
С помощью
var tbl = new qx.ui.table.TableModified(tableModel)
поведение плохое С помощью
var tbl = new qx.ui.table.Table(tableModel)
поведение правильное.
Если вы поместите пример в пустой проект 5.0.2, используя qx.ui.table.TableModified
Вы получаете поведение, если компилируете исходный код, и другое с компилируемой сборкой.
Что не так с этим? Где моя ошибка?
1 ответ
В qooxdoo, по соглашению, есть защищенные и закрытые члены класса, такие как методы или переменные экземпляра. Защищенные участники начинаются с символа подчеркивания _myProtectedMethod
частные члены начинаются с двух подчеркиваний, таких как __myPrivateMethod
, На защищенные элементы не влияет процесс сборки, и они остаются без изменений. Таким образом, они могут быть переопределены производными классами.
Закрытые члены скрываются компилятором в случайное имя, поэтому попытка доступа к закрытому методу или переменной вне класса, в котором они определены, приводит к исключению.
На примере игровой площадки вы переопределили метод _onKeyPress
который сам по себе может быть отменен, поскольку он является защищенным членом.
Но в переопределенном коде вы используете частные члены, такие как this.__focusedRow
который терпит неудачу, потому что в версии сборки больше нет __focusedRow
член как то запутался. В коде больше закрытых членов, таких как __focusedCol
, __selectionManager
и т.п.
Чтобы успешно переопределить метод, вы должны заменить эти закрытые элементы их средствами доступа, например this.getFocusedRow()
вместо this.__focusedRow
, this.getFocusedColum()
вместо this._focusedCol
и т.п.