我正在尝试在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)"/>
而没有形式则可行。
我知道这段代码有什么问题。
答案 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)相同,但是在一个单词中为备用代码分组。
希望这会对你有所帮助。