0

我和这个人战斗了很长一段时间。我的 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

多谢你们!

4

2 回答 2

2

两个注意事项:

  1. treeitemRenderer已弃用,取而代之的是itemRenderer.
  2. 检查你treeModel的不是null因为Sets the renderer which is used to render each item if Tree.getModel() is not null.
于 2012-07-14T22:05:48.927 回答
1

如果你使用的是 ZK 6,你可以使用比 ZK 5 更容易的新绑定机制,并且你不需要编写渲染器。这是显示外观的代码片段https://github.com/zkoss/zk/blob/master/zktest/src/archive/bind/basic/collection-index-tree.zul

于 2012-07-13T10:10:01.563 回答