我想在"滚动条-y"中找到引用。类qx.ui.list.List
使用createChildControl事件,如何检查窗口小部件是否是名为" scrollbar-y"?
到目前为止,我发现了两种似乎都不优雅的方式,但似乎都完成了工作
this.__list = new qx.ui.list.List()
this.__list.addListener("createChildControl", this.__onListCreateChildControl, this);
以后
__onListCreateChildControl: function (e){
debugger;
var child = e.getData();
if (child.constructor === qx.ui.core.scroll.ScrollBar && child.getOrientation() === "vertical") {
child.addListener("scroll", this.__onListScroll, this);
}
},
这隐式检查。显然,如果它是一个滚动条并且它是垂直的,那么它就是我们的y滚动条。是的,它有点像鸭子,但我必须检查两个
if (quacks like one && walks like one)
另一种方式是
__onListCreateChildControl: function (e){
debugger;
var child = e.getData();
if (child.$$subcontrol === 'scrollbar-y') {
child.addListener("scroll", this.__onListScroll, this);
}
},
使用内部变量$$子控件。这工作正常,但它使用qooxdoo内部,这似乎是一个黑客。
P.S。我确实尝试过各种阶段的getChildControl(' scrollbar-y'),因为它是在"中根据需要创建的#34;我永远都是空的。
答案 0 :(得分:2)
你是对的!在子控件创建方面,没有“直接”的可能性来检索作为另一个小部件的子节点创建的小部件的ID(或名称)。
因此我向github提交了一个PR,它正是这样做的:即通过方法$$subcontrol
https://github.com/qooxdoo/qooxdoo/pull/9140公开内部getSubcontrolId
变量来检索子控件的id / name。
PR目前处于审核状态。