为什么需要为_createChildControlImpl()构建的小部件添加外观别名?

时间:2016-01-26 23:46:39

标签: qooxdoo

我在另一个TabView中通过TabView创建一些UI组合。 对于内部人员TabView,我添加了一个特定的选项卡,所有选项卡都通过_createChildControlImpl()实现,

有些喜欢

qx.Class.define('rigel.view.Dashboard', {
    extend: qx.ui.container.Composite,

    construct: function(layout) {
        this.base(arguments, layout);
        this.add(this.getChildControl("container"), {edge: 'center'});
    },

    // overridden
    _createChildControlImpl: function(id, hash) {
        var control;

        switch (id) {
            case "container":
                control = new my.view.tabview.ResourcesCat();
                break;
...

qx.Class.define('my.view.tabview.ResourcesCat', {
    extend: qx.ui.tabview.TabView,

    _createChildControlImpl: function(id, hash) {
        var control;

        switch(id) {
            case "static":
                control = new qx.ui.tabview.Page('', 'icon.png');
                this.add(control);

我这样做只是为了在某些情况下设置TabPage。

无论如何,我不明白为什么每个小部件构建_createChildControlImpl如果我不想更改任何主题,我必须为Appearance添加别名。

所以我有

"widget/tabview": "tabview",
"tabview/static": "tabview-page",
"tabview/static/tab-name": "tabview-page",

我更喜欢某种方法来避免为每个小部件添加装饰别名,并将结构保留在_createChildControlImpl内。

感谢。

1 个答案:

答案 0 :(得分:1)

_createChildControlImpl是为构成主窗口小部件的UI组件而设计的 - 例如,TabView具有子控件,它是按钮栏和用于保存页面的组合;页面有一个标签按钮;按钮具有图标的子控件和标签的另一个按钮;等等

对于所有这些"子控件",它们的样式通常是父小部件样式的一部分,这就是为什么Appearances支持像"按钮这样的路径/图标"或"按钮/标签"。

这可能会让人感到有些困惑,因为儿童控制"只是另一个小部件,但重要的是要保持区别,特别是在主题方面。

在你的例子中,"静态"和"容器"小部件根本不应该实例化为子控件 - 例如,您可以将它们初始化为构造函数中的成员变量:

qx.Class.define('rigel.view.Dashboard', {
    extend: qx.ui.container.Composite,

    construct: function(layout) {
        this.base(arguments, layout);
        this.__container = new my.view.tabview.ResourcesCat();
        this.add(this.__container, {edge: 'center'});
    },

qx.Class.define('my.view.tabview.ResourcesCat', {
    extend: qx.ui.tabview.TabView,

    construct: function() {
        this.base(arguments);
        this.__static = new qx.ui.tabview.Page('', 'icon.png');
        this.add(this.__static);
    }