@Init"
Tmillsclare (talk | contribs) m |
Dennischen (talk | contribs) |
||
Line 41: | Line 41: | ||
<source lang="java"> | <source lang="java"> | ||
+ | public class FooViewModel{ | ||
+ | @Init | ||
+ | public void initFoo(){ | ||
+ | //initializing | ||
+ | } | ||
+ | } | ||
− | public class FooViewModel{ | + | public class BarViewModel extends FooViewModel{ |
@Init(superclass=true) | @Init(superclass=true) | ||
− | public void | + | public void initBar(){ |
− | //initial method of super class will be called first. | + | //initial method of super class FooViewModel will be called first. |
} | } | ||
} | } | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
=Version History= | =Version History= |
Revision as of 07:24, 2 March 2012
Syntax
@Init
@Init(superclass=true)
Description
Target: method
Purpose: Marker annotation to identify a initial method.
Binder calls the method with this annotation when initializing a ViewModel. Only one or none init method is allowed in a ViewModel class. If you set annotation element superclass to true, the ViewModel's parent class's ini method will be invoked first then child's, and this logic repeat on super class. If a class has no method with @Init, no method will be called (including the super class's).
For example, in class hierarchy A(has init) <- B(has init) <- C(no init) <- D (has init, superclass true). D is the last child class.
- When binder initializes D as a view model, it will call D's initial method.
- When binder initializes C, no method will be called.
- When binder initializes B , it will call As' then B's.
- When binder initializes A, it will call A's.
Note that, if you override parent class's initial method e.g. Parent.m1() <- Child.m1(). Because of Java's limitation, binder still call Child.m1(), and Child.m1() will be called twice. To avoid this, you should set superclass to false of Child.m1() and call super.m1() inside it.
We also can use parameter related annotation on initial method's parameters, please refer to subsections of ZK Developer's Reference/MVVM/Syntax/ViewModel/Parameters.
Example
public class MyViewModel{
@Init
public void initialize(){
//initializing
}
}
public class FooViewModel{
@Init
public void initFoo(){
//initializing
}
}
public class BarViewModel extends FooViewModel{
@Init(superclass=true)
public void initBar(){
//initial method of super class FooViewModel will be called first.
}
}
Version History
Version | Date | Content |
---|---|---|
6.0.0 | February 2012 | The MVVM was introduced. |