Grid 网格与嵌套模板渲染

Grid 网格与嵌套模板渲染,grid,zk,Grid,Zk,我有一个像这样的物体: class A { String name; List<B> bList; } class B { String name; } 这将在我的行最左边的列上呈现name元素,然后是一个额外的列,该列打印我的bList ArrayList对象的ArrayList.toString 我现在想要实现的是声明性地告诉ZK将bList中包含的每个B元素呈现为单个单元格。我已经看到了与listbox类似的功能,但是我既没有listbox也没有MVVM实

我有一个像这样的物体:

class A
{
   String name;
   List<B> bList;
}

class B
{
   String name;
}
这将在我的行最左边的列上呈现name元素,然后是一个额外的列,该列打印我的bList ArrayList对象的ArrayList.toString

我现在想要实现的是声明性地告诉ZK将bList中包含的每个B元素呈现为单个单元格。我已经看到了与listbox类似的功能,但是我既没有listbox也没有MVVM实现

为了清楚起见,我现在可以使用行渲染器并通过Java代码以编程方式创建每个单元格来实现这一点,但我希望找到一个声明性解决方案。每个单元格都有不同的CSS属性和事件,这取决于它的内容,所以通过Java代码进行操作会产生一些我不习惯的高度耦合

那么,如何嵌套两个模板来实现此功能呢

编辑: 这里有一把小提琴,描述了我想要达到的目标:

其思想是,活动对象应表示为同一行中的一个单元格。位读取

${each.activities}

应该被我想做的事情所取代。请记住,即使在小样本数据中,您也可以简单地使用附加条目静态引用每个活动对象,它可以是数量可变的元素,而在实际数据中,它最多有40个元素。

您可以在${each.bList}上使用

根据您的评论: 另一个选项是定制,您可以在ZK和Javadocs中找到更多关于它的信息。在追求性能的同时,不要错过关于RowRenderText.DETACH_ON_RENDER的部分

她为您提供了一些示例代码。它应该会告诉你怎么做。无论如何,性能是可以提高的

为网格设置行渲染器:

将getter添加到作曲家:


没错,但经验告诉我,foreach实现的性能非常糟糕。它将我的页面呈现速度降低了5秒。根据您最近的编辑:这就是我现在的解决方案。我想要实现的是相同的行为,但声明性的。我发布的提琴过于简单,但事实上,我定义了每个单元格上的事件以及基于其内容的css属性。因此,如果可能的话,我宁愿在一个元素上声明性地这样做,而不是依赖于导致高耦合的Java代码!首先说明一下怎么样-/对不起,我想我有:你能提供一个当前代码的工作示例吗?是MVVM还是MVC,因为你的zul代码更关注MVC而不是MVVM。MVVM中网格中的网格示例:@chillworld是的,正如我说的,我使用MVC。有网格的网格可能会工作,但必须有一种方法来实现我的目标,对吗?最后,它只是一个具有可变行数的规则网格&cols@bidifx当然,我会尝试创建一个fiddle,但这涉及到foreach,否则你不能向你的zul声明它是关于多个对象的
<grid id="myGrid" model="@{base$composer.AList}">
      <rows>
                    <template name="model">
                        <row align="center">
                            <cell width="196px">${each.name}</cell>
                            <cell>${each.bList}</cell>
                        </row>
                    </template>
                </rows>

</grid>
<grid id="myGrid" rowRenderer="@{base$composer.renderer}" model="@{base$composer.gridModel}">
public RowRenderer<SingleRow> getRenderer() {
    return new RowRenderer<SingleRow>() {
        @Override
        public void render(Row row, SingleRow data, int index) throws Exception {
            new Label(data.getEmployee()).setParent(row);
            for (Activity activity : data.getActivities())
                new Label(activity.getName()).setParent(row);
        }
    };
}