Sapui5 UI5控件的生命周期是如何工作的?

Sapui5 UI5控件的生命周期是如何工作的?,sapui5,Sapui5,有人能更详细地解释一下UI5控件默认事件的生命周期吗?我知道有一个例子给出了控制生命周期的概述,但是,我认为它非常简短,需要更详细的内容。有人能列出控件事件的顺序并解释每个事件的作用吗?你完全正确。文档中很好地隐藏了控制生命周期的细节和实施细节。我将尽力为你总结我到目前为止的理解 控件的生命周期主要由以下因素决定: :你的小小控制权诞生了!函数在构造函数执行期间由框架调用。在这里进行初始化 :在开始呈现控件之前由框架调用。每次(重新)渲染前触发 :在控件呈现完成后由框架调用。每次(重新)渲染后

有人能更详细地解释一下UI5控件默认事件的生命周期吗?我知道有一个例子给出了控制生命周期的概述,但是,我认为它非常简短,需要更详细的内容。有人能列出控件事件的顺序并解释每个事件的作用吗?

你完全正确。文档中很好地隐藏了控制生命周期的细节和实施细节。我将尽力为你总结我到目前为止的理解

控件的生命周期主要由以下因素决定:

  • :你的小小控制权诞生了!函数在构造函数执行期间由框架调用。在这里进行初始化
  • :在开始呈现控件之前由框架调用。每次(重新)渲染前触发
  • :在控件呈现完成后由框架调用。每次(重新)渲染后触发
  • :几乎没有控制权!在销毁之前清除元素实例。由框架调用。在这里打扫卫生。顺便说一句:如果你需要显式地破坏一个控件/元素,你应该调用它,而不是直接退出
下面是一个示例实现,其中包含不同挂钩的一些示例用法:

sap.ui.core.Control.extend("a.sample.Control", {
  init : function() {
    // instantiate a sub-control
    this._btn = new sap.m.Button(); 
  },

  onBeforeRendering : function() {
    // deregister a listener via jQuery
    this.$("subelement").off("click", this.subElementClick);
  },

  onAfterRendering : function() {
    // register a listener via jQuery on a sub-element
    this.$("subelement").on("click", this.subElementClick);
  },

  subElementClick : function() {
    // do stuff
  },

  exit : function() {
    // clean up sub-controls and local references
    this._btn.destroy();
    delete this._btn;
  }

});
为什么不在构造函数中执行init操作?

中有一个基本的UI5构造函数。它为您“准备”UI5对象,然后调用init函数。这意味着在init中,所有设置都将应用于您,您可以像往常一样访问属性和聚合

我为什么不给rerender打电话?

从某种意义上说,SAPUI5渲染是智能的,它可以对排队的重新渲染进行分组和优化。因此,您不应直接调用
rerender
,而应使用
invalidate
标记控件以进行重新渲染

高频


Chris

UI5为Controller实现提供预定义的生命周期挂钩。您可以向控制器添加事件处理程序或其他函数,控制器可以触发事件,其他控制器或实体可以注册这些事件

UI5提供了以下生命周期挂钩:

  • onInit()
    :在实例化视图且已创建其控件(如果可用)时调用;用于在显示视图之前修改视图,以绑定事件处理程序并执行其他一次性初始化

  • onExit()
    :在视图被销毁时调用;用于释放资源和完成活动

  • onAfterRendering()
    :当视图已呈现时调用,因此其HTML是文档的一部分;用于对HTML进行渲染后操作。SAPUI5控件在渲染后获得此钩子

  • onbeforeredering()
    :每次渲染视图时,在调用渲染器之前调用,并将HTML放置在DOM树中


资料来源:

只是为了区别:问题在于控制,而不是控制器。控件既不提供
onInit
也不提供
onExit
。然而,尽管不是控件,Controller中的生命周期钩子仍然可以工作,因为处理程序只是对应视图的一部分,而相应视图又是控件。