2

这是zul文件供参考

<?page title="MVVM Tree POC"?>
<zk>
    <borderlayout height="800px">
        <west size="25%"></west>
        <center>
            <window apply="org.zkoss.bind.BindComposer"
                viewModel="@id('vm') @init('com.nagarro.viewmodel.TreeViewModel')"
                title="Dynamic Tree" border="normal">
                <tree checkmark="true" model="@bind(vm.treeModel)"
                    onSelect="@command('select')" >
                    <template name="model" var="node" status="s">
                        <treeitem checkable="@load(node.checkable)"
                            open="true">
                            <treerow style="text-align:center;">
                                <treecell
                                    label="@bind(node.data.firstName)" style="text-align:left;">
                                </treecell>
                            </treerow>
                        </treeitem>
                    </template>
                </tree>

            </window>
        </center>
    </borderlayout>
</zk>

树标记中有一个“onSelect”事件,并且只有某些树项有复选框。现在,我想在选中复选框时为相应的树行创建某些组件,例如组合框。我正在尝试使用树的 onSelect 事件来做到这一点,但问题是我需要传递所选复选框的引用,因为 onSelect 事件被保留在 treeItems 获取的模板范围之外,所以我无法传递该引用呈现。有没有其他方法可以做我想做的事

这是我通过上述 zul 文件获得的页面。

我想知道哪个复选框被选中?

4

2 回答 2

3

您可以在每个事件上传递任何参数(来自 ZK 文档):

<button label="Delete" onClick="@command('delete', item=item)"/>

并在您的 java 代码中使用此参数:

@Command
public void delete(@BindingParam("item") Item item ) {
    //do some stuff based on what item you've picked
}

在您的情况下,我会将 onSelect-Event 从 Tree-Component 移动到 Treeitem,如下所示:

<tree checkmark="true" model="@bind(vm.treeModel)">
                        <template name="model" var="node" status="s">
                            <treeitem checkable="@load(node.checkable)"
                                open="true" onSelect="@command('select', nameParameter=node.data.firstName">
                                <treerow style="text-align:center;">
                                    <treecell
                                        label="@bind(node.data.firstName)" style="text-align:left;">
                                    </treecell>
                                </treerow>
                            </treeitem>
                        </template>
                    </tree>

并在您的@Command 方法中使用参数:

@Command
public void select(@BindingParam("nameParameter") String nameParameter ) {
    System.out.println(nameParameter + " selected");
}

请参阅ZK MVVM > 高级 > 参数文档了解更多信息

于 2013-02-13T11:38:40.440 回答
0

这是我经常遇到的问题。我的解决方案一直是将数据附加到组件本身;将数据库实体的 id 或对象本身保留在复选框上,以便在事件期间进行检索。

checkbox.setAttribute("myAttributeName", myAttributeValue);

这需要演员来检索,这是不幸的,但通过一些最佳实践,您可以自信地做到这一点。

于 2013-01-31T12:48:54.940 回答