0

我有以下结构显示在 zul 文件中,并从 Java 控制器获取诊所对象列表。

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

  • 列表框
  • 项目清单
  • 网格

这是需要显示的结构:

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

3 回答 3

1

正如 Darius 给出的答案中所解释的,这里是一个如何将 a<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>
于 2013-02-24T08:02:48.053 回答
0

您可以使用列表框或网格。

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

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

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

于 2013-02-24T02:34:56.057 回答
0

有多种方法可以实现这一目标

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

最后的话 -只是不要

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

于 2015-06-12T17:40:57.613 回答