我在另一个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
内。
感谢。
答案 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);
}