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

And*_*tes 8 sapui5

有人可以提供有关UI5控件默认事件生命周期的更详细说明吗?我知道文档中有这个页面概述了控件生命周期,但是,我认为它非常简短,需要更详细的内容.有人可以列出控件事件的顺序并解释每个事件的作用吗?

csc*_*uff 21

你是绝对正确的.控件生命周期和实现细节的详细信息非常隐藏在文档中.我会试着总结一下我对你的理解.

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

  • init:你的小控件诞生了!在构造函数执行期间,框架调用函数.你在这里做初始化的东西.
  • onBeforeRendering:在启动控件渲染之前由框架调用.在每次(重新)渲染之前触发.
  • onAfterRendering:在控件渲染完成后由框架调用.每次(重新)渲染后触发.
  • 退出:RIP小控制!在销毁之前清理元素实例.由框架调用.你在这里清理.顺便说一句:如果你需要显式地破坏Control/Element,你应该调用destroy而不是直接退出.

下面是一个示例实现,其中包含一些针对不同钩子的示例用法:

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;
  }

});
Run Code Online (Sandbox Code Playgroud)

为什么我不应该在构造函数中执行初始化操作?

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

我为什么不打电话给投降?

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

HF

克里斯