有没有更好的方法来获取子控件名称?

Is there a better way to get subcontrol name?

我正在尝试在 class qx.ui.list.List

的 "scrollbar-y" 中获取参考

如何使用 createChildControl 事件检查小部件是否是名为 "scrollbar-y" 的小部件?

到目前为止,我发现了两种方法,其中 none 看起来很优雅,但似乎都可以完成工作

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);
            }
        },

其中使用了内部变量$$subcontrol。这工作正常,但它使用了 qooxdoo 内部机制,这看起来像是一个 hack。

P.S。我确实在各个阶段尝试了 getChildControl('scrollbar-y') 但由于它是在 "as needed" 基础上创建的,所以我总是得到 null.

你说得对!就子控件创建而言,无法 "straightforward" 检索作为另一个小部件的子项创建的小部件的 ID(或名称)。

因此我向 github 提交了一份 PR,它正是这样做的:即通过方法 [=] 公开内部 $$subcontrol 变量来检索子控件的 id/name 11=]https://github.com/qooxdoo/qooxdoo/pull/9140

该 PR 目前处于审核状态。