2

2 つの異なるビュー モデルを持つページがあります。

<?page title="My page" contentType="text/html;charset=UTF-8"?>
<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.mycompany.FirstViewModel')">
<!-- A lot of unimportant stuff -->
<tabbox>
    <tabs>
        <tab label="Tab1" ></tab>
                    <!-- Other unimportant tabs -->
    </tabs>
    <tabpanels>
        <tabpanel>
        <include src="inc/other.zul" p="@ref(vm.selected)" pid="@ref(vm.selected.id)" ></include>
        </tabpanel>
    </tabpanels>
</tabbox>
</div>

インクルードは次のとおりです。

<window>
    <label id="sid" value="@load(pid)" />
    <div apply="org.zkoss.bind.BindComposer"
      viewModel="@id('vms') @init('com.mycompany.SecondViewModel')">
        <listbox model="@id('vars') @load(p.someList)"
            selectedItem="@bind(vms.selected)"
            emptyMessage="No data in list">
                    <!-- Template and stuff -->
        </listbox>
        <label id="sid1" value="@load(pid)" />
    </div>
</window>

問題は、2 番目のビューモデルを定義すると、すべての外部参照にアクセスできなくなることです。最初のラベルには値がありますが、リストボックスまたは 2 番目のラベルには値がありません。それを行う方法はありますか?私はこれを行うことに成功しませんでした:

<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vms') @init('com.mycompany.SecondViewModel')" list="@ref(p.someList)">
<listbox model="@id('vars') @load(list)"
    selectedItem="@bind(vms.selected)"
    emptyMessage="No data in list">

2 番目のビュー モデルを最初のビュー モデルにマージすることはできますが、それはあまり便利ではありません。また、モジュール式のアプローチを可能にする他のソリューションにもオープンです。

ZK の私のバージョンは 6.0.1 です

4

2 に答える 2

0

外部コンポーネントにアクセスできない理由は、コンポーザー、つまり BindComposer であり、メイン zul とインクルード zul に対して同じコンポーザーを持っています。外部 ZUL から含まれるリストボックスにアクセスする必要があります。したがって、Include ZUL の Composer を削除し、ウィンドウに ID を付与します。2 つのスペース所有者が内側のリストボックスにアクセスします。

<?page title="My page" contentType="text/html;charset=UTF-8"?>
<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.mycompany.FirstViewModel')">
<!-- A lot of unimportant stuff -->
<tabbox>
    <tabs>
        <tab label="Tab1" ></tab>
                    <!-- Other unimportant tabs -->
    </tabs>
    <tabpanels>
        <tabpanel>
        <include id="include" src="inc/other.zul" p="@ref(vm.selected)" pid="@ref(vm.selected.id)" ></include>
        </tabpanel>
    </tabpanels>
</tabbox>
</div>


<window id="win">
    <label id="sid" value="@load(pid)" />
    <div 
      viewModel="@id('vms') @init('com.mycompany.SecondViewModel')">
        <listbox id="listbox2" model="@id('vars') @load(p.someList)"
            selectedItem="@bind(vms.selected)"
            emptyMessage="No data in list">
                    <!-- Template and stuff -->
        </listbox>
        <label id="sid1" value="@load(pid)" />
    </div>
</window>

BindComposer でアクセスしているときに、変数を public として宣言します。

Listbox include$win$listbox2;

doAfterCompose() にこの行を追加します

Sysout("You can access your inner Listbox and it is:"+include$win$listbox2);

これで、Listbox NULL が取得されないことがわかります!!

リンク : http://books.zkoss.org/wiki/ZK_Developer's_Reference/UI_Composing/ID_Space

于 2012-05-30T06:04:34.260 に答える
0

これは実際には ZKのバグであり、将来のバージョンで修正されています。

于 2012-06-10T22:29:26.190 に答える