Initialization"
Tmillsclare (talk | contribs) m |
m ((via JWB)) |
||
(14 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{ZKDevelopersReferencePageHeader}} | {{ZKDevelopersReferencePageHeader}} | ||
+ | {{Deprecated | url=[http://books.zkoss.org/zk-mvvm-book/8.0/viewmodel/initialization.html zk-mvvm-book/8.0/viewmodel/initialization]|}} | ||
+ | == Initial Method == | ||
− | + | The binder is responsible for creating and initializing a ViewModel instance. If you want to perform your own initialization in a ViewModel, you can declare your own '''initial method''' by annotating a method with <code>@Init</code>. The Binder will invoke this method when initializing a ViewModel during a page creation phase. Each ViewModel can only have one initial method. | |
− | The binder is responsible for creating and initializing a ViewModel instance. If you want to perform your own initialization in a ViewModel, you can declare your own '''initial method''' by annotating a method with < | ||
<source lang="java"> | <source lang="java"> | ||
Line 16: | Line 17: | ||
</source> | </source> | ||
− | This annotation has an | + | This annotation has an attribute named "superclass", if you set it to "true". The binder will look for the initial method of ViewModel's parent class and invoke it first if it exists. |
− | <source lang="java"> | + | <source lang="java" highlight='12'> |
public class ParentViewModel{ | public class ParentViewModel{ | ||
@Init | @Init | ||
− | public void | + | public void parentInit(){ |
//initialization code | //initialization code | ||
} | } | ||
Line 31: | Line 32: | ||
public class ChildViewModel extends ParentViewModel{ | public class ChildViewModel extends ParentViewModel{ | ||
− | @Init( | + | @Init(superclass=true) |
− | public void | + | public void childInit(){ |
//initialization code | //initialization code | ||
} | } | ||
} | } | ||
</source> | </source> | ||
− | * ParentViewModel's initial method is invoked first then ChildViewModel's. | + | * Line 12: <code>ParentViewModel</code>'s initial method is invoked first then <code>ChildViewModel</code>'s. |
+ | |||
+ | Please notice that child class's initial method '''should not override parent class's initial method''', or parent's initial method won't be called and child's will be called twice. | ||
+ | |||
+ | == Apply on Class == | ||
+ | |||
+ | Since 6.0.1 | ||
+ | |||
+ | If super has an init methold but its ChildViewModel doesn't, you can add <code>@Init(superclass=true)</code> on the ChildViewModel to use super's init. | ||
+ | <source lang="java" highlight="6"> | ||
+ | public class ParentViewModel { | ||
+ | @Init | ||
+ | public void init(){} | ||
+ | } | ||
+ | |||
+ | @Init(superclass=true) | ||
+ | public class ChildViewModel extends ParentViewModel{ | ||
+ | } | ||
+ | </source> | ||
The initial method can retrieve various context object by applying annotation on its parameter, please refer [[ZK Developer's Reference/MVVM/Advance/Parameters]]. | The initial method can retrieve various context object by applying annotation on its parameter, please refer [[ZK Developer's Reference/MVVM/Advance/Parameters]]. | ||
+ | =Version History= | ||
− | + | {| class='wikitable' | width="100%" | |
− | |||
− | {| | ||
! Version !! Date !! Content | ! Version !! Date !! Content | ||
|- | |- |
Latest revision as of 07:36, 8 July 2022
This article is out of date, please refer to zk-mvvm-book/8.0/viewmodel/initialization for more up to date information.
Initial Method
The binder is responsible for creating and initializing a ViewModel instance. If you want to perform your own initialization in a ViewModel, you can declare your own initial method by annotating a method with @Init
. The Binder will invoke this method when initializing a ViewModel during a page creation phase. Each ViewModel can only have one initial method.
public class MyViewModel {
@Init
public void init(){
//initialization code
}
}
This annotation has an attribute named "superclass", if you set it to "true". The binder will look for the initial method of ViewModel's parent class and invoke it first if it exists.
public class ParentViewModel{
@Init
public void parentInit(){
//initialization code
}
}
public class ChildViewModel extends ParentViewModel{
@Init(superclass=true)
public void childInit(){
//initialization code
}
}
- Line 12:
ParentViewModel
's initial method is invoked first thenChildViewModel
's.
Please notice that child class's initial method should not override parent class's initial method, or parent's initial method won't be called and child's will be called twice.
Apply on Class
Since 6.0.1
If super has an init methold but its ChildViewModel doesn't, you can add @Init(superclass=true)
on the ChildViewModel to use super's init.
public class ParentViewModel {
@Init
public void init(){}
}
@Init(superclass=true)
public class ChildViewModel extends ParentViewModel{
}
The initial method can retrieve various context object by applying annotation on its parameter, please refer ZK Developer's Reference/MVVM/Advance/Parameters.
Version History
Version | Date | Content |
---|---|---|
6.0.0 | February 2012 | The MVVM was introduced. |