我和这个人战斗了很长一段时间。我的 TreeitemRenderer 如下:
public class PermissionTreeRenderer implements TreeitemRenderer<PermissionTreeNode> {
@Override
public void render(final Treeitem treeItem, PermissionTreeNode node, int arg) throws Exception {
final PermissionTreeNode ptn = (PermissionTreeNode)node;
Treerow treeRow = new Treerow();
treeItem.setOpen(ptn.isOpen());
treeItem.appendChild(treeRow);
PermissionItem current = (PermissionItem) ptn.getData();
treeRow.appendChild(new Treecell(current.getName()));
}
}
我的 BasicComposer(扩展 GenericForwardComposer)具有这两个属性
private PermissionTreeModel treeModel;
private TreeitemRenderer treeitemRenderer = new PermissionTreeRenderer();
与吸气剂和二传手。
在我的 .zul 中,我的树如下所示:
<tree id="permissionTree" width="100%"
model="@{win$composer.treeModel}"
treeitemRenderer="@{win$composer.treeitemRenderer}">
<treecols>
<treecol label="Item" width="400px" />
<treecol label="Wert" />
</treecols>
</tree>
到目前为止,我通过测试看到的是他加载了模型(他进入了 getter),而不是 treeitemRenderer。无论我做什么,都不会调用渲染方法。
编辑:我的问题是我只填充了根节点(用于测试)并且它需要至少一个子项来绘制......
好吧@dennis:我会像你说的那样尝试使用新的方式,所以这是我的代码:
<tree id="permissionTree" width="100%"
model="@bind(vm.treeModel)" style="text-align:left;">
<treecols>
<treecol label="Item" width="400px" />
<treecol label="Wert" />
<treecol label="Einfügen" width="100px" />
</treecols>
<template name="model" var="node" status="s">
<treeitem open="@bind(node.open)">
<treerow>
<treecell label="@bind(s.index)" />
<treecell label="@bind(node.data)" />
<treecell>
<hbox>
<button label="Index"
onClick="@command('showIndex', index=s.index)" />
<button label="Delete"
onClick="@command('delete', node=node)" />
<button label="Add After"
onClick="@command('addAfter', node=node)" />
<button label="Add Before"
onClick="@command('addBefore', node=node)" />
</hbox>
</treecell>
</treerow>
</treeitem>
</template>
</tree>
但它不会再用数据填充我的树了。哦,那个 status 的变量是什么?我需要在其他文件中做准备吗?
编辑:问题解决了,必须申请 org.zkoss.bind.BindComposer
多谢你们!