NotifyChange часть модели в ZK
В моем zul у меня есть Grid, и я использую два названных шаблона для него. Я использовал модель из моей виртуальной машины в моем zul, который я использую в шаблоне Grid. Теперь я изменяю модель в потоке в виртуальной машине, и после завершения потока я отправляю postNOtifyingChange из виртуальной машины. Проблема в том, что я хочу изменить только часть модели в zul (которая была изменена потоком). Поскольку, если другая часть также обновляется в представлении, внесенные пользователем изменения будут потеряны при запуске postNotifyChange. Зул код:
<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>
Так что здесь я просто хочу NotifyChange на части "${each.beaconValue}". В ViewMOdel я делаю BindUtils.postNotifyChange(null, null,NNComponentDetailViewModel.this, "tablefields");
уведомить об изменении в этой модели. Правильный ли этот подход? Как этого добиться, чтобы была изменена только часть модели? Или есть какой-то другой подход, так как я думаю, что ZK допускает только одну модель в Grid. Пожалуйста, предложите, поскольку это, кажется, заблокировано из-за ограничения платформы ZK.
1 ответ
Если вы хотите, чтобы часть модели была изменена, вы должны сказать, что объект изменился.
Пример:
BindUtils.postNotifyChange(null, null, oneObjectOfYourModel, "*");
или если вы хотите изменить только "beaconValue":
BindUtils.postNotifyChange(null, null, oneObjectOfYourModel, "beaconValue");
Конечно, когда вы настраиваете почти все объекты, вы должны вызывать оповещение изменилось несколько раз, но это решение вашей проблемы.