zk表单重置在MVVM中不起作用

时间:2014-01-08 13:28:45

标签: mvvm zk

我正在尝试在zk中使用MVVM模型。 如果我在zk中使用form并尝试重置它不绑定的值

 <?page title="" contentType="text/html;charset=UTF-8"?>
    <zk>
        <window border="none" apply="org.zkoss.bind.BindComposer"
            viewModel="@id('ix') @init('com.Controller')"
            form="@id('fx') @load(ix) @save(ix,before='add')" >
            <textbox value="@bind(fx.title)"/>
    <button onClick="@command('reverse', fx=fx, field='title')" label="Reverse"/>

        </window>
    </zk>

@Command
@NotifyChange("title")
public void reverse() {
    String value = (String) fx.getField(fieldName);
    String newValue = new StringBuilder(value).reverse().toString();
setTitle(newValue);
}

但如果我直接使用<textbox value="@bind(ix.title)"/>而没有形式则可行。 我知道这段代码有什么问题。

1 个答案:

答案 0 :(得分:2)

我会解释你的错误。

<button onClick="@command('reverse', fx=fx, field='title')" label="Reverse"/>

在这里你将反向调用命令,你给它2个参数,fx和field。

@Command
@NotifyChange("title")
public void reverse() {

这里有命令方法,但没有您期望的参数。 它也不需要给它指向它因为Title可能是一个全局私有String。 如果你想给params,那么这应该是代码:

@Command
@NotifyChange("title")
public void reverse(@BindingParam("fx") Form fx, @BindingParam("title") String title) {

第二:

 form="@id('fx') @load(ix) @save(ix,before='add')" >

不需要,你使用mvvm,所以你用ix调用vm,这对你来说已经过时了。

你在这里做的事情有时需要网格或列表,不要直接由@bind更新,而只需按下保存按钮。
这是因为@save非常强大,它将在不调用save方法的情况下更改数据库中的值。
@bind(ix.title)实际上与@load(ix.title)@save(ix.title)相同,但是在一个单词中为备用代码分组。

希望这会对你有所帮助。