@AfterCompose"
m (→Description) |
|||
Line 13: | Line 13: | ||
'''Target:''' method, class (since 6.0.2) | '''Target:''' method, class (since 6.0.2) | ||
− | '''Purpose:''' Marker annotation to identify a life-cycle method which will be | + | '''Purpose:''' Marker annotation to identify a life-cycle method which will be invoked during <javadoc>org.zkoss.bind.BindComposer</javadoc>'s doAfterCompose invocation. |
− | + | '''Only one or none''' AfterCompose 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 @AfterCompose, no method will be called (including the super class's)<ref>If you override parent class's AfterCompose 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. | |
</ref>. | </ref>. | ||
For example, in class hierarchy A(has AfterCompose) <- B(has AfterCompose) <- C(no AfterCompose) <- D (has AfterCompose, superclass true). D is the last child class. | For example, in class hierarchy A(has AfterCompose) <- B(has AfterCompose) <- C(no AfterCompose) <- D (has AfterCompose, superclass true). D is the last child class. | ||
− | * When | + | * When bindComposer start to handle D while doAfterCompose, it will call D's AfterCompose method. |
− | * When binder | + | * When binder reaches C, no method will be called. |
− | * When binder | + | * When binder reaches B , it will call As' then B's. |
− | * When binder | + | * When binder reaches A, it will call A's. |
− | We also can use parameter related annotation on AfterCompose method's parameters, please refer to subsections of [[ZK Developer's Reference/MVVM/Syntax/ViewModel/Parameters]]. | + | We also can use parameter related annotation on AfterCompose method's parameters just as what we can do in @Init, please refer to subsections of [[ZK Developer's Reference/MVVM/Syntax/ViewModel/Parameters]]. |
<blockquote> | <blockquote> |
Revision as of 10:51, 27 June 2012
Syntax
@AfterCompose
@AfterCompose(superclass=true)
Description
Target: method, class (since 6.0.2)
Purpose: Marker annotation to identify a life-cycle method which will be invoked during BindComposer's doAfterCompose invocation.
Only one or none AfterCompose 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 @AfterCompose, no method will be called (including the super class's)[1].
For example, in class hierarchy A(has AfterCompose) <- B(has AfterCompose) <- C(no AfterCompose) <- D (has AfterCompose, superclass true). D is the last child class.
- When bindComposer start to handle D while doAfterCompose, it will call D's AfterCompose method.
- When binder reaches C, no method will be called.
- When binder reaches B , it will call As' then B's.
- When binder reaches A, it will call A's.
We also can use parameter related annotation on AfterCompose method's parameters just as what we can do in @Init, please refer to subsections of ZK Developer's Reference/MVVM/Syntax/ViewModel/Parameters.
- ↑ If you override parent class's AfterCompose 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.
Example
public class FooViewModel{
@AfterCompose
public void doFoo(){
//do while AfterCompose
}
}
public class BarViewModel extends FooViewModel{
@AfterCompose(superclass=true)
public void afterComposeBar(){
//AfterCompose method of super class FooViewModel will be called first.
}
}
//since 6.0.2
@AfterCompose(superclass=true)
public class ChildViewModel extends BarViewModel{
}
Version History
Version | Date | Content |
---|---|---|
6.0.2 | June 2012 | The MVVM was introduced. |