-
FEATURED COMPONENTS
First time here? Check out the FAQ!
1 | initial version | |
Hi all, thanks for your comments, finally change as below
main.zul
<zk>
<window viewModel="@id('vm') @init('org.my.MainVM')>
<include id="include" src="@load(vm.currentUrl)" data="@load(vm.data)"/>
</window>
</zk>
MainVM.java
public class MainVM {
private String currentUrl;
private Object data;
@GlobalCommand
@NotifyChange({"currentUrl", "data"})
public void changeIncludeUrl (@BindingParam('url') String url ,
@BindingParam('person') Person person) throws Exception {
currentUrl = url;
data = employee;
}
// getter and setter
}
person.zul (inner1)
<zk>
<div viewModel="@id('vm') @init('org.my.vm.PersonVM')">
<grid model="@load(vm.personList)">
...
<template name="model">
...
<button label="Edit"
onClick="@global-command('changeIncludeUrl', url='/edit.zul', person=each)"/>
...
</template>
</grid>
</div>
</zk>
PersonVM.java (Inner1VM)
public class PersonVM {
private List<Person> personList;
...
// getter and setter
}
PersonEditVM.java (Inner2VM)
public class PersonEditVM {
private editPerson;
@Init
public void init(@ExecutionArgParam("data") Object data) {
editPerson = (Person) data;
}
// getter and setter
}
Hi all, thanks for your comments, finally change as below
main.zul
<zk>
<window viewModel="@id('vm') @init('org.my.MainVM')>
<include id="include" src="@load(vm.currentUrl)" data="@load(vm.data)"/>
</window>
</zk>
MainVM.java
public class MainVM {
private String currentUrl;
private Object data;
@GlobalCommand
@NotifyChange({"currentUrl", "data"})
public void changeIncludeUrl (@BindingParam('url') String url ,
@BindingParam('person') Person person) throws Exception {
currentUrl = url;
data = employee;
person;
}
// getter and setter
}
person.zul (inner1)
<zk>
<div viewModel="@id('vm') @init('org.my.vm.PersonVM')">
<grid model="@load(vm.personList)">
...
<template name="model">
...
<button label="Edit"
onClick="@global-command('changeIncludeUrl', url='/edit.zul', person=each)"/>
...
</template>
</grid>
</div>
</zk>
PersonVM.java (Inner1VM)
public class PersonVM {
private List<Person> personList;
...
// getter and setter
}
PersonEditVM.java (Inner2VM)
public class PersonEditVM {
private editPerson;
@Init
public void init(@ExecutionArgParam("data") Object data) {
editPerson = (Person) data;
}
// getter and setter
}
3 | No.3 Revision |
Hi all, thanks for your comments, finally change as below
main.zul
<zk>
<window viewModel="@id('vm') @init('org.my.MainVM')>
<include id="include" src="@load(vm.currentUrl)" data="@load(vm.data)"/>
</window>
</zk>
MainVM.java
public class MainVM {
private String currentUrl;
private Object data;
@GlobalCommand
@NotifyChange({"currentUrl", "data"})
public void changeIncludeUrl (@BindingParam('url') String url ,
@BindingParam('person') Person person) throws Exception {
currentUrl = url;
data = person;
}
// getter and setter
}
person.zul (inner1)
<zk>
<div viewModel="@id('vm') @init('org.my.vm.PersonVM')">
<grid model="@load(vm.personList)">
...
<template name="model">
...
<button label="Edit"
onClick="@global-command('changeIncludeUrl', url='/edit.zul', person=each)"/>
...
</template>
</grid>
</div>
</zk>
PersonVM.java (Inner1VM)
public class PersonVM {
private List<Person> personList;
...
// getter and setter
}
PersonEditVM.java (Inner2VM)(Inner2VM , edit.zul's viewModel)
public class PersonEditVM {
private editPerson;
@Init
public void init(@ExecutionArgParam("data") Object data) {
editPerson = (Person) data;
}
// getter and setter
}
4 | fix according to cor3000's comments |
Hi all, thanks for your comments, finally change as below
main.zul
<zk>
<window viewModel="@id('vm') @init('org.my.MainVM')>
<include id="include" src="@load(vm.currentUrl)" data="@load(vm.data)"/>
</window>
</zk>
MainVM.java
public class MainVM {
private String currentUrl;
private Object data;
@GlobalCommand
// @NotifyChange({"currentUrl", "data"})
"data"}) // potential execution notify order issue, please see cor3000's comments below
public void changeIncludeUrl (@BindingParam('url') String url ,
@BindingParam('person') Person person) throws Exception {
currentUrl = url;
data = person;
employee;
BindUtils.postNotifyChange(null, null, this, "data"); // make sure the NotifyChange order
BindUtils.postNotifyChange(null, null, this, "currentUrl");
}
// getter and setter
}
person.zul (inner1)
<zk>
<div viewModel="@id('vm') @init('org.my.vm.PersonVM')">
<grid model="@load(vm.personList)">
...
<template name="model">
...
<button label="Edit"
onClick="@global-command('changeIncludeUrl', url='/edit.zul', person=each)"/>
...
</template>
</grid>
</div>
</zk>
PersonVM.java (Inner1VM)
public class PersonVM {
private List<Person> personList;
...
// getter and setter
}
PersonEditVM.java (Inner2VM , edit.zul's viewModel)
public class PersonEditVM {
private editPerson;
@Init
public void init(@ExecutionArgParam("data") Object data) {
editPerson = (Person) data;
}
// getter and setter
}