AfterCompose 与 Init ZK

AfterCompose vs Init ZK

我正在使用 Zk 框架。我知道 @AfterCompose@Init 注释的存在,但我不知道在 ViewModel 中使用它时的区别和顺序.

谁能解释一下区别?

例如,

@AfterCompose
public void init(@ContextParam(ContextType.VIEW) Component view) {
    Selectors.wireComponents(view, this, false); // wire the components here
}

@Init
public void init() {
    //do more things
}

谢谢

@init 和@AfterCompose 之间的区别在于它们何时执行而不是它们将执行什么。这两种方法以类似的方式分配视图模型中的变量和任何其他不依赖于组件创建的初始化任务。

ZUL页面生命周期如下:

1.页面初始化

2。组件创建

它首先加载 ZUL 中分配的组件的属性

如果使用 ViewModel 属性将任何视图模型分配给组件,则它由 Binder 初始化并调用 init 方法

如果我们将某个方法标记为@init注解,那么它将在这里被调用。

组件创建完成后,它会调用 AfterCompose

如果我们将某个方法标记为@AfterCompose 注解,那么它将在这里被调用。

3。事件处理

4。渲染


@init :

  1. 它在组件创建完成之前加载最初在 ViewModel 创建时在 ViewModel 中声明的带注释的方法。
  2. 我们可以使用 init 方法分配需要在 ViewModel 中初始化的变量。

@AfterCompose :

  1. 它仅在组件创建完成后才加载ViewModel 中声明的注释方法。
  2. 我们可以使用 AfterCompose 方法分配需要在 ViewModel 中初始化的变量。

注意:建议使用 AfterCompose 而不是 init。因为它是在组件创建和视图模型初始化之后调用的。

请参考以下链接以获得更好的理解!!

https://www.zkoss.org/wiki/ZK_Developer%27s_Guide/Appendix/Component_Life_cycle/Table_of_Sequence

http://books.zkoss.org/zk-mvvm-book/8.0/syntax/viewmodelinit.html

http://books.zkoss.org/zk-mvvm-book/8.0/syntax/aftercompose.html