2

私の zul にはグリッドがあり、2 つの名前付きテンプレートを使用しています。Grid テンプレートで使用している zul で VM のモデルを使用しました。現在、VM のスレッドでモデルを変更しており、スレッドの完了時に VM から postNOTifyingChange を実行しています。問題は、(スレッドによって変更された) zul 内のモデルの一部のみを変更したいことです。ビューで他の部分も更新されると、postNotifyChange が発生したときにユーザーが行った変更が失われるためです。zul コードは次のとおりです。

 <window apply="org.zkoss.bind.BindComposer"
    viewModel="@id('vm') @init('The View Model')"
    validationMessages="@id('vmsgs')">
    <grid id="componentgrid" height="900px" model="@load(vm.tablefields) @template((vm.displayEdit) ? 'editable' : 'noneditable')">
        <columns>
            <column>Attribute</column>
            <column>NOSS</column>
            <column>Beacon</column>
        </columns>
        <rows>
            <template name="noneditable">
                <row>
                    <label value="${each.attributename}"></label>
                    <label value="${each.attributevalue}"></label>
                    <label value="${each.beaconValue}"></label>


                </row>
            </template>

            <template name="editable">
                <row>

                    <label value="${each.gui_label}"></label>
                    <zk choose="">
                        <zk when="${each.enum_map ne null}">
                            <combobox id="${each.name}" value="${each.value}" width="150px">
                                <comboitem label="${each.value}" value="${each.key}"
                                    forEach="${each.enum_map}" />
                            </combobox>
                        </zk>
                        <zk when="${each.date == true}">
                            <datebox id="${each.name}" cols="12" format="short "
                                value="${each.datevalue}" />
                        </zk>
                        <zk>
                            <textbox id="${each.name}" value="${each.value}" />
                        </zk>
                    </zk>
                    <label value="${each.beaconValue}"></label>

                </row>


            </template>

        </rows>
    </grid>
    </window>

というわけで、ここでは「${each.beaconValue}」の部分でNotifyChangeしたいだけです。ViewMOdelでは BindUtils.postNotifyChange(null, null,NNComponentDetailViewModel.this, "tablefields");、このモデルでnotifychangeをやっています。このアプローチは正しいですか?モデルの一部のみを変更するにはどうすればよいでしょうか? または、ZK では 1 つのグリッドで 1 つのモデルしか許可されないと思うので、他のアプローチはありますか。ZK フレームワークの制限により、これがブロックされているように見えるので、提案してください。

4

1 に答える 1

4

モデルの一部を変更したい場合は、オブジェクトが変更されたと言わなければなりません。

例 :

BindUtils.postNotifyChange(null, null, oneObjectOfYourModel, "*"); 

または、「beaconValue」のみを変更したい場合:

BindUtils.postNotifyChange(null, null, oneObjectOfYourModel, "beaconValue");

もちろん、ほとんどすべてのオブジェクトを調整するときは、notifychanged を複数回呼び出す必要がありますが、これが問題の解決策です。

于 2015-01-10T07:10:54.867 に答える