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