2012-02-13 29 views
0

我有一個函數,它使用小部件創建佈局。問題是一個小部件是虛擬樹(在佈局的左側),右側的第二個小部件取決於左側的點擊行。虛擬樹就像菜單一樣工作,它應該將行名的值返回給正確的窗口部件,並在提供的數據的右側重新創建它。但是目前它不是重新創建,而是爲舊的添加一個新的小部件。如何在右側重新創建小部件,而不是將其添加到現有小部件(界面類似於帶有測試的qooxdoo demobrowser視圖)?qooxdoo虛擬樹作爲菜單

_createLayout : function() 
    { 
     // Create main layout 
     var dockLayout = new qx.ui.layout.Dock(); 
     var dockLayoutComposite = new qx.ui.container.Composite(dockLayout); 
     this.getRoot().add(dockLayoutComposite, {edge:0}); 

     // Create header 
     this.__header = new bank.view.Header(); 
     dockLayoutComposite.add(this.__header, {edge: "north"}); 

     // Create toolbar 
     this.__toolBarView = new bank.view.ToolBar(this); 
     dockLayoutComposite.add(this.__toolBarView, {edge: "north"}); 

     // Create the tree view, which should create dockLayout below, when user clicks with Row value 
     dockLayoutComposite.add(this.getTreeView(), {edge: "west"}); 
     // This layout should be created and recreated with clicked row value 
    dockLayoutComposite.add(bank.InvoiceListBuilder.createList("Tree_returned_value"), {edge: "center"}); 
    }, 

getTreeView : function() 
    { 
     var hBox = new qx.ui.container.Composite(new qx.ui.layout.HBox(20)); 
     var tree = new qx.ui.treevirtual.TreeVirtual("Tree"); 
     tree.setColumnWidth(0, 170); 
     tree.setAlwaysShowOpenCloseSymbol(true); 
     var dataModel = tree.getDataModel(); 
     var te2 = dataModel.addBranch(null, "Folders", true); 
     dataModel.addBranch(te2, "Incoming", false); 
     dataModel.addBranch(te2, "Outgoing", false); 
     dataModel.addBranch(te2, "Drafts", false); 
     dataModel.setData(); 
     hBox.add(tree); 
     var foldercontent = bank.InvoiceListBuilder.createList("incoming"); 
     tree.addListener("changeSelection", 
      function(e) 
      { 
      // this function should return row value to function: bank.InvoiceListBuilder.createList("Tree_returned_value") and create/recreate dockLayout with newly created widget from bank.InvoiceListBuilder.createList function 
      }); 
     return hBox; 
    }, 

回答

1
您使用的是舊的虛擬樹的實現(qx.ui.treevirtual.TreeVirtual)

,我會建議使用qx.ui.tree.VirtualTree實現。

下一步是爲您的視圖使用類似控制器的東西,它可以監聽選擇並在選擇發生變化時創建小部件。控制器應該知道用於添加小部件的容器。

當你的左側只是一個列表。您也可以使用虛擬列表(qx.ui.list.List)並使用一組樹模型。

乾杯, Chris