2017-07-04 14 views
0

Ich bin völlig neu in ZK. Ich muss N Combobox mit ihren Etiketten dynamisch erstellen und sie füllen. Ich beziehe bereits eine Combobox mit ihrer ID, aber da es viele Comboboxen geben kann, sollte ich ihre IDs nicht kennen, also löst es mein Problem nicht.Gruppe von Combobox dynamisch in ZK

Ich muss N Combobox, ihre Etiketten hinzufügen und sie dynamisch bevölkern. Gibt es eine Möglichkeit, diese Gruppe von Combobox zu erstellen und dynamisch zu setzen? Irgendwelche Ideen?

Der folgende Code funktioniert, um die Combo zu füllen, die bereits ihre feste ID kennt.

//In this example I assume I have a label and a combobox. But could have 0 to N of them. 

private Label lblComboMetadatos; 
private Combobox cmbMetadatos; 

//THEN 

if (cmbMetadatos.getItemCount() == 0) { 
    lblComboMetadatos.setValue(trdMetaTipoDocumental.getNombreMetadato()); //Here I set the name of label but I should really can not know how many of them could be. There may exist 0..N 
    for (TrdMetadato trdMetaDato: trdMetaTipoDocumental.getTrdMetadatos()) { 

    String enumValores = trdMetaDato.getValoresEnumerado(); //Here I set the values of a combobox but I can not know how many of them could be. There may exist 0..N 
    cmbMetadatos.appendItem(enumValores]); 
} 

} 
<zk> 
    <window id="idWindow" title="nameWindow" apply="controller.java" border="normal" closable="true" sizable="true" maximizable="true" maximized="true" height="85%" width="150%" style="overflow:auto;"> 
    <!-- CONTINUES --> 
    <groupbox> 
     <hlayout> 
     <label id="lblComboMetadatos" /> 
     <combobox id="cmbMetadatos"></combobox> 
     </hlayout> 
    </groupbox> 
    <!-- CONTINUES --> 
    </window> 
</zk> 

Antwort

1

Diese Frage ist zu Ihrem last question sehr ähnlich. Sie sollten den übergeordneten Container (hlayout in diesem Fall) mit Ihrem Controller verbinden und dann die Komponenten dort erstellen.

@Wire 
private Component container; // your hlayout 

@Override // This method should be specified by a composer super class 
public void doAfterCompose(Component comp) throws Exception 
    for (<count an index or loop over data>) { 
     hlayout.appendChild(new Label("Hello World"); 
     Combobox cb = new Combobox(); 
     // append Comboitems 
     cb.addEventListener(Events.ON_SELECT, ...); 
     hlayout.appendChild(cb); 
    } 
} 

Wenn Sie MVVM verwendet, könnten Sie children binding verwenden, um die Komponenten in zul zu erstellen.

Verwandte Themen