使用qooxdoo 5.0.2(或以前的版本)我将平板电脑小部件子类化并覆盖_onKeyPress
方法。
然后,生成源我得到了正确的行为,但是对于生成构建,行为是不同的。
我简化了我的问题,下面是这个例子。
我将表格小部件子类化,并使用qooxdoo 5.0.2表格小部件源中的相同代码覆盖_onKeyPress
方法。
运行示例,编辑单元格,然后按Enter键。
使用
var tbl = new qx.ui.table.TableModified(tableModel)
行为不好。 使用
var tbl = new qx.ui.table.Table(tableModel)
行为是正确的。
如果你把这个例子放在一个空白的5.0.2项目中,使用qx.ui.table.TableModified
,你会得到一个行为,如果是编译源代码,另一个是编译版本。
这有什么问题?我的错误在哪里?
答案 0 :(得分:1)
在qooxdoo中,按照惯例,受保护的私有类成员(如方法或实例变量)。受保护的成员以.slidef {
transition:
width 1s linear 1s,
height 1s linear 1s,
right 1s linear 1s,
transform 1s linear 0s;
width: 400px;
height: 400px;
right: 300px;
-webkit-transform: perspective(0px) rotateY(0deg);
}
这样的下划线开头,私有成员以_myProtectedMethod
这两个下划线开头。受保护的成员不受构建过程的影响,并保持原样。这样,派生类就可以覆盖它们。
编译器将私有成员混淆为随机名称,因此尝试访问定义它们的类之外的私有方法或变量会导致异常。
在您的游乐场示例中,您已覆盖方法__myPrivateMethod
,该方法本身可以覆盖,因为它是受保护的成员。
但是在被覆盖的代码中,您使用_onKeyPress
之类的私有成员失败了,因为在构建版本中,由于它被混淆了,所以不再有this.__focusedRow
成员。代码中有更多私人成员,例如__focusedRow
,__focusedCol
等。
要成功覆盖该方法,您必须使用其访问者替换这些私有成员,例如__selectionManager
而不是this.getFocusedRow()
,this.__focusedRow
而不是this.getFocusedColum()
等。