0

我有两个 qooxdoo 课程:

主容器

qx.Class.define("main.container",
{
    type: "singleton",
    extend: webfrontend.gui.CustomWindow,

    construct: function() {
        this.base(arguments);
        this.setLayout( new qx.ui.layout.VBox());
        var info = new qx.ui.container.Composite( new qx.ui.layout.VBox());
        this.add(info);
        this.info = info;
    },
    destruct: function(){},
    members: {
        info: null,
        __setInfo: function(array) {
            this.info.removeAll();
            for(var i = 0; i < array.length; i++) {
                var label = new qx.ui.basic.Label(array[i]);
                this.info.add(label);
            }
        }
    }
});

main.widget

qx.Class.define("main.widget",
{
    type: "singleton",
    extend: qx.ui.core.Widget,

    construct: function() { ... },
    members: {
        __sendData: function(data) {
            var cont = main.container.getInstance();
            var setInfo = cont.__setInfo;
            setInfo(data);
        },
        __onHover: function() {
            var data = ....
            this.__sendData(data);
        }
    }
});

我想要做的是从main.widget类中获取数据并将其传递给main.container类并将标签添加到信息容器中。

但是,当我运行此代码时,会出现此错误TypeError: Cannot call method 'removeAll' of undefined,但是当我在控制台中运行此代码时:main.container.getInstance().__setInfo([...])它可以工作!。

我做错了什么,我该如何解决?

酷狗乐园

4

1 回答 1

1

像使用 __setInfo 一样为方法添加两个下划线将方法标记为私有。这意味着只有类本身才能访问此方法。qooxdoo 通过在构建过程中重命名这些方法来强制执行此操作。如果你想从另一个类访问这个方法,你应该将它实现为一个公共方法,这意味着方法名的开头不能有下划线。查看有关类的手册页以获取更多详细信息:http ://manual.qooxdoo.org/current/pages/core/classes.html?highlight=private%20protected#access

于 2013-07-02T05:51:13.070 回答