Жизненный цикл компонентов Ractive

Помимо вызова init, я не уверен, каков жизненный цикл компонента Ractive. Например, когда безопасно обращаться к DOM напрямую? Я пытался использовать популярный подключаемый модуль jQuery спарклайнов, но он так и не заработал. Вместо этого я использовал директиву и — вуаля — прекрасные спарклайны.

Любая документация о том, какие события и обратные вызовы компонент получает в Ractive?


person Jochen Bedersdorfer    schedule 18.02.2014    source источник


Ответы (2)


Библиотека уже достаточно зрелая. Используйте Ractive.on('render', ...); или onrender в шаблоне/компоненте для доступа к DOM. См.: http://docs.ractivejs.org/latest/lifecycle-events.

Это верно, начиная с версии 0.6 и далее.

person arxpoetica    schedule 02.07.2015

Краткий ответ заключается в том, что в самой последней стабильной версии он не определен — в некоторых случаях метод компонента init вызывается до того, как компонент будет добавлен в DOM. Это ошибка.

В следующей версии 0.4.0 это уже не так: http://cdn.ractivejs.org/edge/Ractive.min.js

Начиная с 0.4.0 это выглядит так:

Ractive.components.sparkline = Ractive.extend({
  beforeInit: function (options) {
    // called before any setup happens, in case you
    // need to transform `options` in any way
  },
  init: function (options) {
    // called immediately after the initial render,
    // when the component is in the DOM
  },
  complete: function () {
    // called when any initial transitions have
    // completed
  }
});

Событие teardown будет запущено до того, как компонент будет удален из DOM — например, в методе init вы можете добавить некоторый код для выполнения любой необходимой очистки (если она есть):

init: function () {
  this.on('teardown', function () {
    // cleanup
  }
},
...

Буду рад любым вашим отзывам о других событиях/зацепках, которые, по вашему мнению, отсутствуют, если таковые имеются.

person Rich Harris    schedule 21.02.2014