@Init"

From Documentation
(upward -> superclass)
Line 6: Line 6:
 
@Init
 
@Init
  
@Init(upward=true)
+
@Init(superclass=true)
  
 
</source>
 
</source>
Line 15: Line 15:
 
'''Purpose:''' Marker annotation to identify a initial method.  
 
'''Purpose:''' Marker annotation to identify a initial method.  
  
Binder calls the method with this annotation when initializing a ViewModel. '''Only one (could be zero)''' initial method is allowed in a ViewModel class. If you set annotation element '''upward''' to '''true''', the ViewModel's parent class's initial method will be invoked first then child's, and this logic repeat on super class.
+
Binder calls the method with this annotation when initializing a ViewModel. '''Only one (could be zero)''' initial method is allowed in a ViewModel class. If you set annotation element '''superclass''' to '''true''', the ViewModel's parent class's initial method will be invoked first then child's, and this logic repeat on super class.
 
call sequence is still super first.If a class has no method with @Init, no method will be called (including the super class's).
 
call sequence is still super first.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, upward true).  D is the last child class.
+
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 D as a view model, it will call D's initial method.
 
* When binder initializes C, no method will be called.
 
* When binder initializes C, no method will be called.
Line 24: Line 24:
 
* When binder initializes A, it will call A'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 upward to false of Child.m1() and call super.m1() inside it.
+
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]].
 
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]].
Line 44: Line 44:
  
 
public class FooViewModel{
 
public class FooViewModel{
@Init(upward=true)
+
@Init(superclass=true)
 
public void initialize(){
 
public void initialize(){
 
//initial method of super class will be called first.
 
//initial method of super class will be called first.

Revision as of 04:16, 10 February 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 (could be zero) initial method is allowed in a ViewModel class. If you set annotation element superclass to true, the ViewModel's parent class's initial method will be invoked first then child's, and this logic repeat on super class. call sequence is still super first.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(superclass=true)
	public void initialize(){
		//initial method of super class will be called first.
	}
}



Version History

Last Update : 2012/02/10


Version Date Content
6.0.0 February 2012 The MVVM was introduced.




Last Update : 2012/02/10

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.