我现在和qooxdoo玩了差不多一个月了 我很兴奋这个小野兽;)。
现在我正在尝试使用id创建任何小部件, 我找到了一种使用Class Composite(http://demo.qooxdoo.org/current/apiviewer/#qx.ui.container.Composite)
管理子窗口小部件的方法但我找不到创建具有特定ID的孩子的方法,如
var textfield1 = composite.add("triggerOne");
textfield1 = new qx.ui.form.TextField();
唯一的方法是在widgets类中使用受保护的方法,但这应该在复合类中公开? (http://demo.qooxdoo.org/current/apiviewer/#qx.ui.core.Widget~_createChildControl!method_protected)
答案 0 :(得分:1)
该方法由直接扩展Widget()的控件使用,以允许使用id。 id允许子控件/窗口小部件可以访问可能包含Widget的控件(这可能是您需要它的原因。)它还有助于确保正确处理子控件。我不知道如何为添加到类似Composite的控件中的控件/窗口小部件分配id。
根据我的经验,创建扩展qx.ui.container.Composite(或GroupBox或TabView或...)的对象需要将包含的小部件分配给成员变量,如果您需要再次直接引用它们。还要记住,在扩展类似Composite的对象时(如果您要创建并经常将它们作为界面的一部分进行销毁),您需要保留对包含的小部件的内部引用。将使用此引用,以便您可以在析构函数中自行清理:
http://qooxdoo.678.n2.nabble.com/Memory-Management-best-practices-in-composites-td5325700.html
在途中是使用成员数组并将每个子窗口小部件推送到数组中。然后在析构函数中使用this._disposeArray()。当我没有使用这种技术时,我已经被基于Composite的小部件中的内存泄漏所困扰。 (我有一些长期运行的Web界面,需要成为好公民。)类似于Composite的控件继承的底层Widget()类实际上保持了它自己的内部数组来做同样的事情,但它实现了相同的目标。内部实施可能会发生变化(因此,您希望保留自己的内容。)
如果你想使用特定的id,你需要扩展qx.ui.core.Widget(而不是类似Composite的控件。)查看qooxdoo SDK中的许多示例。请参阅qx.ui.groupbox.GroupBox()作为示例。
如果我理解正确,扩展Widget与类似Composite的类之间实现的主要区别在于在Widgets中使用id以及只要通过via添加子控件的好处他们将自动被清理并且#34;在析构函数中。基于Widget的控件的缺点是,与类似Composite的控件执行的代码和方法相比,它们往往需要更多的精力去规划它们。我经常从类似Composite的控件开始,然后将它们更新为扩展小部件,如果我发现我将重新使用它们。
答案 1 :(得分:0)
我使用setUserData在我想要识别的每个对象上设置一个标识符字段,标识为http://demo.qooxdoo.org/current/apiviewer/#qx.core.Object~setUserData!method_public