2017-06-29 10 views
0

私はZKで全く新しいです。私はN listheadersとN listcellsをmy zulファイルで作成する必要があります。しかし、私はどのように私のJavaコントローラからそれを行うかわからないと私はではない MVVMを使用しています。あなたのコントローラに、ZULでワイヤーをlisthead空のままにして、そこlistheadersを作成することができますZKでリストヘッダとリストセルを動的に追加する方法

@Wire 
    private Window idWindow; 

    private Listheader header; 
    private Listcell item1; 

    @Override 
    public void onCreate(Event event) { 

    header.setLabel("laaaa");// It would set just one header but I can have many (N headers) and same for items 

    } 
<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 --> 

    <listbox id="mainList" hflex="1" vflex="1"> 
     <listhead> 
      <listheader id="header" label="A" /> 
      <listheader id="header1" label="B" /> 
      <listheader id="header2" label="C" /> 
      .... 
      <listheader id="headerN" label="N" />    
     </listhead> 
     <listitem> 
      <listcell id="item1" label="A"/> 
      <listcell id="item2" label="B"/> 
      <listcell id="item3" label="C"/> 
      .... 
      <listcell id="itemN" label="D"/> 
     </listitem> 
    </listbox> 

    <!-- CONTINUES --> 
    </window> 
</zk> 

答えて

1

問題は何かのようになります。重要なステップはlistboxlistheadを求めて、それにlistheadersを追加することです。セルの場合は、モデルを使用してリストデータを与える場合は、listboxに各アイテム用のセルを作成するレンダラーを与えます。

あなたのZULがはるかに短くなります。

<zk> 
    <window ... > 
     <listbox id="mainList" hflex="1" vflex="1"> 
      <listhead /> 
     </listbox> 
    </window> 
</zk> 

次に、あなたのコントローラでは、あなたがdoAfterComposeにヘッダを作成し、レンダラを添付:

@Wire 
private Listbox mainList; 

@Override // This method should be specified by a composer super class 
public void doAfterCompose(Component comp)throws Exception 
{ 
    super.doAfterCompose(comp); 

    mainList.setModel(someModelWithYourData); 

    // create listheaders (manually/in for-loop/based on data...) 
    Listhead head = mainList.getListhead(); 
    head.appendChild(new Listheader("A")); 
    ... 

    // attach renderer 
    mainList.setItemRenderer(new ListitemRenderer<Object>() // use proper data type instead of Object 
    { 
     @Override 
     public void render(Listitem item, Object data, int index) 
      throws Exception 
     { 
      item.appendChild(new Listcell("a")); 
      ... 
     } 
    }); 
} 

の例では、ZKの開発者向けサイトでもあります:https://www.zkoss.org/wiki/ZK_Developer%27s_Reference/MVC/View/Renderer/Listbox_Renderer

モデルを使用できない場合は、listitemsをzulまたはコントローラーを作成し、リストセルを作成します。

for (Component child : mainList.getChildren()) 
{ 
    if (child instanceof Listitem) 
    { 
     Listitem item = (Listitem) child; 
     // do the same as in the renderer 
    } 
} 
+0

ありがとうございます。それは動作します、私はモデルで使用することができませんでしたが、他の方法で働いた。 –

関連する問題