绑定数据到zk中的listitem

Binding data to listitem in Zk

我试图找出 Zk 框架中的 forEach 属性。这是 forEach:

的定义

This attribute is used in conjunction with collections. For each element in the collection, the element is rendered with the concrete value. Example:

{listitem label="${each}" forEach="${elements}" /}

我有一个试图填充 listitem:

的 zul 页面
<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
    <window title="new page title" border="normal"
        apply="org.zkoss.bind.BindComposer"
        viewModel="@id('sampleViewModel')@init('deneme.tahasozgen.ornek1.SampleViewModel')">
        New Content Here!

        <hlayout>
            count:
            <label value="@load(sampleViewModel.count)" />
        </hlayout>

        <button label="add" onClick="@command('cmd')" />

        <button label="getir eleman sayısı"
            onClick="@command('getirKurumSayisi')" />

        <listitem label="${each}" forEach="${elements}" />

    </window>
    
</zk>

如何填充 listitem?上面的 eachelements 是如何定义的?提前致谢。

您似乎正在尝试使用 forEach attribute。 虽然这是一个可能的选择,但我建议不要使用它,因为它是 ZK 中较旧(且不太实用)的迭代选项。

您的选择是: ZUTI - forEach element(需要ZK EE)

这是最简单直接的迭代模板选项。 集合和模板进去,模板化结果出来。

<forEach items="@load(vm.model)" >
  <label value="@load(each)"/>
</forEach>

它也是为 MVVM 定制设计的,因为您的示例代码正在使用它。 您可以将集合作为 VM 的成员传递,并且可以在集合更改时自动通知它以动态重绘 UI 的那部分。

现在,如果您无法访问 ZUTI,第二好的(在 CE 中可用)是 children binding

本质上是相同的想法,只是它绑定到父级而不是独立的阴影元素。

<vlayout id="load" children="@load(vm.nodes)">
    <template name="children" var="node">
        <label value="@bind(node.name)" style="padding-left:10px"/>
    </template>
</vlayout>

下面对 forEach 属性的解释,以防您真的想使用它:

首先,有一个longer documentation available here

forEach 属性将“为每个”在 forEach 参数中传递的集合中的对象重复一个组件。 此示例使用列表项,但它可以是任何 ZK 组件。 (仅供参考,列表项的唯一有效父项是列表框,因此如果您不打算在此页面中使用列表框,则应将其更改为更简单的容器,例如 div 等)

关于“如何填充”部分,参数中传递的值可以是 zul 页面中可用的任何可解析变量。 我看到您正在使用 mvvm,因此您已经声明了一个 viewModel。 您可以使用那个 viewModel,假设它有一个 getMyBeanList() 方法:

<div forEach=${sampleViewModel.myBeanList}/>

现在对于让它变得笨拙的部分,当你在 collection == [a,b,c] 处声明 <component randomAttribute="${each}" forEach="${collection}"/> 时,你实际声明的是:

<component randomAttribute="${a}"/> 
<component randomAttribute="${b}"/> 
<component randomAttribute="${c}"/> 

本质上,您正在创建已声明组件的 N 个副本,值 ${each} 被迭代列表中的相关值替换。

又来了!我强烈建议你看看 ZK 中的其他迭代方法,因为这个方法真的很旧,而且很难用。