私の 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 フレームワークの制限により、これがブロックされているように見えるので、提案してください。