2012-01-23 103 views
0

我一直在玩qooxdoo差不多一個月,現在 ,我對這個小野獸很興奮;)。qooxdoo創建特定ID的小工具

現在我試圖創建任何小部件的ID, 我已經找到一種方法來管理與類複合子控件(http://demo.qooxdoo.org/current/apiviewer/#qx.ui.container.Composite

,但我無法找到一個方法來創建具有特定ID的孩子像

var textfield1 = composite.add("triggerOne"); 
textfield1 = new qx.ui.form.TextField(); 

唯一的方法是在小部件類中的受保護的方法,但這應該暴露在複合類? (http://demo.qooxdoo.org/current/apiviewer/#qx.ui.core.Widget~_createChildControl!method_protected)

回答

1

該方法由直接擴展Widget()以允許使用id的控件使用。該id允許可能包含Widget的控件訪問子控件/控件(這可能是您需要它的原因)這也有助於確保子控件正確處理,我不知道如何將控件/控件分配到類似複合控件的控件中,我不知道如何分配控件或組件。擴展的qx.ui.container.Composite(或GroupBox或TabView或...)需要將包含的小部件分配給成員變量,如果需要再次直接引用它們。請記住,當擴展類似Composite的對象(如果你打算經常創建和銷燬它們)作爲你的界面的一部分),你將需要保持對包含的小部件的內部引用。這將參考使用,以便您可以在析構函數後自己清理:

http://qooxdoo.678.n2.nabble.com/Memory-Management-best-practices-in-composites-td5325700.html

上的方法是使用一個成員數組,推動各子部件到陣列中。然後在析構函數中使用this._disposeArray()。當我沒有使用這種技術時,我在基於複合的小部件中被內存泄漏咬傷。 (我有一些需要成爲好公民的長時間運行的web界面)類似Composite類的控件繼承的底層Widget()類實際上保留了它自己的內部數組來執行相同的操作,但它是一個內部實現,因此你會想保持你自己的。)

如果你想使用特定的ID你需要擴展qx.ui.core.Widget(而不是類似Composite的控件)。檢查很多例子在qooxdoo SDK中。以qx.ui.groupbox.GroupBox()爲例。

如果我的理解正確,擴展Widget與類似Composite的類之間的實現的主要區別是在Widgets中使用了id,並且只要通過id添加子控件,將在析構函數中自動「清理」。基於Widget的控件的不利之處在於,他們往往需要更多的精力來規劃它們,而不是類似Composite的控件所採用的代碼並行方法。我經常從一個類似Composite的控件開始,然後將它們更新爲擴展小部件,如果我發現我會重新使用它們。