Как работает жизненный цикл элементов управления UI5?

может ли кто-нибудь дать более подробное объяснение о жизненном цикле событий по умолчанию элемента управления UI5? Я знаю, что есть на странице документации это дает обзор жизненного цикла элемента управления, однако, я думаю, что это очень кратко и нужно что-то более подробное. Может ли кто-нибудь перечислить порядок событий элемента управления и объяснить, что делает каждое событие?

2 ответов


вы абсолютно правы. Детали жизненного цикла элемента управления и детали реализации очень хорошо скрыты в документах. Я постараюсь подытожить свое понимание.

жизненный цикл элемента управления в основном определяется:

  • init: ваш маленький контроль рождается! Функция вызывается платформой во время выполнения конструктора. Сделайте свою инициализацию здесь.
  • onBeforeRendering : вызывается фреймворком перед началом отрисовки элемента управления. Триггеры перед каждым (повторным)рендерингом.
  • onAfterRendering: вызывается платформой после завершения визуализации элемента управления. Триггеры после каждого (повторного)рендеринга.
  • выход : РИП мало контроля! Очищает экземпляр элемента перед уничтожением. Вызывается фреймворком. Убирайся здесь. Btw: если вам нужно явно уничтожить элемент управления / элемент, вы должны звоните уничтожить и не сразу выйти.

вот пример реализации с некоторыми образцами использования для разных крючков:

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 в ManagedObject. Он "готовит" ваш объект UI5 для вас и впоследствии вызывает вашу функцию init. Это означает, что в вашем init все настройки уже будут применены для вас и вы можете получить доступ к свойствам и агрегаты как обычно.

почему бы мне не позвонить rerender?

В SAPUI5 перевода разумен в том смысле, что она объединяет и оптимизирует очереди rerenderings. Поэтому вы никогда не должны звонить rerender напрямую, но вместо того, чтобы использовать invalidate пометить контроль за перерисовку.

HF

Крис


UI5 предоставляет предопределенные крючки жизненного цикла для контроллер реализация. Вы можете добавить обработчики событий или другие функции к контроллеру, и контроллер может запускать события, для которых могут регистрироваться другие контроллеры или сущности.

UI5 предоставляет следующие крючки жизненного цикла:

  • onInit(): вызывается, когда экземпляр представления и его элементы управления (если они доступны) уже созданы; используется для изменения представления до он отображается для привязки обработчиков событий и выполнения другой одноразовой инициализации

  • onExit(): вызывается при уничтожении представления; используется для освобождения ресурсов и завершения деятельности

  • onAfterRendering(): вызывается, когда представление было визуализировано и, следовательно, его HTML является частью документа; используется для выполнения манипуляций после рендеринга HTML. Элементы управления SAPUI5 получают этот крючок после оказанный.

  • onBeforeRendering(): вызывается каждый раз при отображении представления, перед вызовом визуализатора, и HTML помещается в DOM-дерево.

источник:ui5.sap.com/#/topic/121b8e6337d147af9819129e428f1f75