有没有更好的方法来获得子控制名称?

时间:2016-08-27 23:45:08

标签: qooxdoo

我想在"滚动条-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;我永远都是空的。

1 个答案:

答案 0 :(得分:2)

你是对的!在子控件创建方面,没有“直接”的可能性来检索作为另一个小部件的子节点创建的小部件的ID(或名称)。

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

PR目前处于审核状态。