2

在我的 zul 中,我有一个 Grid,我使用了两个命名模板。我在我的 zul 中使用了我的 VM 中的一个模型,我在 Grid 模板中使用了该模型。现在,我正在 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 只允许网格中的一个模型。请提出建议,因为由于 ZK 框架的限制,这似乎被阻止了。

4

1 回答 1

4

如果您想更改模型的一部分,则必须说对象已更改。

例子 :

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

或者如果您只想更改“beaconValue”:

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

当然,当您调整几乎所有对象时,您必须不止一次调用 notifychanged,但这是您问题的解决方案。

于 2015-01-10T07:10:54.867 回答