2017-02-01 3 views
1

Использование qooxdoo 5.0.2 (или предыдущей версии) Я подклассифицирую виджет планшета и переопределяю метод _onKeyPress. Затем, генерируя источник, я получаю правильное поведение, но при генерации сборки поведение отличается.Я не могу понять странное поведение, подклассифицировать виджет планшета

Я упростил свой вопрос, приведенный ниже. I виджет таблицы подклассов и переопределить метод _onKeyPress с таким же кодом из источника виджета qooxdoo 5.0.2. Запустите пример, отредактируйте ячейку и нажмите клавишу ввода.

Использование

var tbl = new qx.ui.table.TableModified(tableModel) 

поведение плохо. Использование

var tbl = new qx.ui.table.Table(tableModel) 

поведение является правильным.

Если вы поместите пример в пустой проект 5.0.2, используя qx.ui.table.TableModified, вы получите поведение, если компилируете исходный код, а другое - с компиляцией.

Что не так с этим? Где моя ошибка?

Playground example

ответ

1

В qooxdoo есть, согласно конвенции, защищенные и члены частного класса, такие как методы или переменные экземпляра. Защищенные участники начинаются с символа подчеркивания, такого как _myProtectedMethod, частные участники начинаются с двух символов подчеркивания, таких как __myPrivateMethod. Защищенные члены не подвержены влиянию процесса сборки и остаются такими, какие они есть. Таким образом, они переопределяются производными классами.

Частные члены запутываются компилятором случайным именем, поэтому попытка доступа к закрытому методу или переменной вне класса, где они определены, приводит к исключению.

В примере на игровой площадке вы переопределили метод _onKeyPress, который сам по себе подходит для переопределения, поскольку он является защищенным членом.

Но в рамках переопределенного кода вы используете закрытых членов, таких как this.__focusedRow, который терпит неудачу, потому что в версии сборки не более __focusedRow участник, поскольку он был запутан. Есть более частные пользователи в коде как __focusedCol, __selectionManager и т.д.

Чтобы успешно переопределить метод, вы должны заменить эти частные член их аксессорами, как this.getFocusedRow() вместо this.__focusedRow, this.getFocusedColum() вместо this._focusedCol и т.д.

+0

Спасибо. Я подозревал, что мне нужно подтверждение, потому что ситуация с источником/строкой меня смутила. Сейчас работает нормально. Я не знаю, как этот сайт работает над квалификацией ответа, что я должен делать сейчас. Я буду читать. – fsaiyuk2002

+0

Рад, что я мог помочь. Пожалуйста, примите мой ответ, если в СО, если он ответил на ваш вопрос. Спасибо. – level420

Смежные вопросы