Виртуальное дерево qooxdoo как меню - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть функция, которая создает макет с виджетами. Проблема в том, что один из виджетов является виртуальным деревом (с левой стороны макета), а второй виджет с правой стороны зависит от щелкаемой строки на левой стороне. Виртуальное дерево работает как меню, которое должно возвращать значение имени строки в правый виджет и воссоздавать его справа от предоставленных данных. Однако в настоящее время он не воссоздает, а добавляет новый виджет к старому. Как воссоздать виджет справа, не добавляя его к существующему (интерфейс похож на представление демо-браузера 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 Ответ

1 голос
/ 14 февраля 2012

вы используете старую реализацию виртуального дерева (qx.ui.treevirtual.TreeVirtual), я бы предложил использовать реализацию qx.ui.tree.VirtualTree.

Следующий шаг - использовать что-то вроде контроллера для вашего представления, которое прослушивает выделение и создает виджеты, когда выделение изменяется. Контроллер должен знать контейнер для добавления виджетов.

Когда ваша левая сторона - просто список. Вы также можете использовать виртуальный список (qx.ui.list.List) и использовать набор древовидной модели.

Ура, Chris

...