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>

tree タグには「onSelect」イベントがあり、一部の treeItem だけにチェックボックスがあります。ここで、チェックボックスが選択されたときに、対応するツリー行のコンボボックスのような特定のコンポーネントを作成したいと考えています。ツリーの onSelect イベントを使用して実行しようとしていますが、問題は、選択したチェックボックスの参照を渡す必要があることです。これは、onSelect イベントが、treeItems が取得するテンプレートの範囲外に保持されているため、渡すことができません。レンダリングされます。私がやりたいことをする他の方法はありますか

これは、上記の zul ファイルから取得したページです。

どのチェックボックスが選択されているか知りたいですか?

4

2 に答える 2

3

そのようなすべてのイベントで任意のパラメーターを渡すことができます (ZK docs から):

<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-method でパラメーターを使用します。

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

詳細については、 ZK MVVM > Advance > Parameter Docsを参照してください。

于 2013-02-13T11:38:40.440 に答える
0

これは私がよく遭遇する問題です。私の解決策は、常にコンポーネント自体にデータを添付することでした。イベント中に取得できるように、データベース エンティティの ID またはオブジェクト自体をチェックボックスに保持します。

checkbox.setAttribute("myAttributeName", myAttributeValue);

これにはキャストを取得する必要がありますが、これは残念なことですが、いくつかのベスト プラクティスを使用すれば、自信を持って取得できます。

于 2013-01-31T12:48:54.940 に答える