我有两个qooxdoo课程:
main.container :
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([...])
它可以工作!。
我做错了什么,我该如何解决?
答案 0 :(得分:1)
使用与__setInfo一样的两个下划线前缀方法将该方法标记为私有。这意味着只有类本身才能访问此方法。 qooxdoo通过在构建过程中重命名这些方法来强制执行此操作。如果要从另一个类访问此方法,则应将其作为公共方法实现,这意味着不要在方法名称的开头加下划线。有关详细信息,请查看有关类的手册页:http://manual.qooxdoo.org/current/pages/core/classes.html?highlight=private%20protected#access