【问题标题】:AfterCompose vs Init ZKAfterCompose 与 Init ZK
【发布时间】:2016-12-19 15:35:30
【问题描述】:

我正在使用 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
}

谢谢

【问题讨论】:

  • User AfterCompose for MVC 和 Init for MVVM 方法

标签: java annotations viewmodel zk


【解决方案1】:

@init 和@AfterCompose 的区别在于它们何时执行,而不是它们将执行什么。这两种方法的工作方式类似,用于在 View Model 中分配变量以及任何其他不依赖于组件创建的初始化任务。

ZUL 页面生命周期如下:

1.页面初始化

2。组件创建

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

如果任何 View Model 使用 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

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多