zk nested forEach



我在zul文件中显示了以下结构,并从Java控制器中获得了clinic对象的列表。

我在zul中尝试了几个zk组件,但没有成功。forEach应该使用什么组件?

  • 列表框
  • ListItem
  • 网格

以下是需要显示的结构:

For each clinic
{ 
    For each clinic.location 
    { 
        For each (clinic.location.provider) 
        { 
            Output (provider display name) 
        } 
        Output (clinic name) 
        Output (clinic.location address) 
        Output (clinic.locatoin telephone number) 
        Output (clinic.web address)
    }
}

正如Darius给出的答案所解释的,这里有一个如何将<Grid><rows>组件一起使用的示例

<?page title="Result"?>
<zk>
    <window apply="org.zkoss.bind.BindComposer"
        viewModel="@id('vm') @init('fully.qualified.viewmodel.classname')"
        title="Result Window" border="normal" >
        <div>
            <grid>
                <rows>
                    <row>
                        <listbox model="@bind(vm.listname)">
                            <listhead>
                                <listheader label="Item Name"
                                    style="text-align:center;">
                                </listheader>
                                <listheader label="Attribute Value"
                                    style="text-align:center;">
                                </listheader>
                                <listheader label="Qualifier Value"
                                    style="text-align:center;">
                                </listheader>
                            </listhead>
                            <template name="model" var="item">
                                <listitem value="${item }">
                                    <listcell label="@load(item.name)"
                                        style="text-align:center;">
                                    </listcell>
                                    <listcell
                                        style="text-align:center;">
                                        <textbox
                                            value="@bind(item.attributeValue)"
                                            style="text-align:center;" />
                                    </listcell>
                                    <listcell
                                        label="@load(item.qualifierValue)"
                                        style="text-align:center;">
                                    </listcell>
                                </listitem>
                            </template>
                        </listbox>
                    </row>
                </rows>
            </grid>
        </div>
    </window>
</zk>

您可以使用Listbox或Grid。

  • 如果使用Listbox,它将包含Listitem对象
  • 如果使用Grid,它将包含Rows对象,该对象将包含Row对象

对于Listitem或Row,您将添加其他组件:最简单的是Label对象

我注意到您有一个内部提供者表。对于这些,您可能需要一个嵌套的网格或列表框。您也可以使用ZK的Detail组件。它将允许您展开以查看内部表。

有多种方法可以实现此

  • 包括单独的zul文件到模板行,whitch将包含一个具有单独视图模型的网格-这种风格你可以一次显示所有嵌套网格,但它应该而且会有更大数据量的性能损失(因为行数==嵌套网格的视图模型数(
  • 包含带有自己模板的嵌套网格,并将数据模型作为视图模型的参数,并按需显示此网格(按钮单击、行单击等(-这是在没有性能问题的情况下的最佳方式,但一次只能显示一个嵌套网格

词尾词-不要

将网格嵌套到网格是一种非常糟糕的设计,因为渲染它非常困难,而且它只适用于小数据。在我看来,最好的方法是并排创建两个独立的网格,并在第一个网格中单击行后,在第二个网格中显示adition数据。通过这种方式,您可以在没有性能损失的情况下实现非常快速的gui,甚至可以使用大量数据。另一种方法是在网格行上创建一个弹出窗口,whitch将显示额外的数据,这对您的性能也有很大好处。

相关内容

  • 没有找到相关文章

最新更新