Skip to content
This repository

Неконсистентность событий #194

Open
chestozo opened this Issue · 3 comments

2 participants

Aleksei Androsov
Collaborator

@i2r обнаружил неконсистентность событий.
Представьте себе такую систему view:

parentView
|
|-- childView

Сами вьюхи:

ns.View.define('parentView', {
  events: {
    'ns-view-htmlinit': 'onHtmlInit',
    'test-event@show': 'handleTestEvent'
  }
});

ns.View.define('childView', {
  events: {
    'ns-view-htmlinit': 'onHtmlInit'
  },
  methods: {
    onHtmlInit: function() {
      ns.events.trigger('test-event');
    }
  }
});

Так вот, у parentView вначале выполнится handleTestEvent и только потом onHtmlInit!
Это как бы неконсистентно.

Тут несколько вариантов решения:
1) можно вызывать ns.events.atrigger('test-event'); из childView. Тогда все view успеют проинициализироваться (потому что сейчас ns.events.trigger работает синхронно).
2) можно добавить новых событий вида ns-view-htmlinited, ns-view-shown (можно назвать их ns-view-htmlinit-done и ns-view-show-done). Тогда в них мы будем уверены, что состояние консистентное (все view показаны и для всех выполнен htmlinit).

Мне больше нравится вариант 2 )
Потому что вариант 1 сложнее реализуем (надо всё время помнить про trigger и atrigger.
Ну и вариант 2 не исключается вариант 1.

Collaborator
Aleksei Androsov
Owner

да, вариант 2 делается просто, после кидания события ns-view-htmlinit, надо просто пройтись по тому же массиву и кинуть ns-view-htmlinited

Хотя я бы назвал их ns-view-htmlinit-begin и ns-view-htmlinit-end

Collaborator

Ну ок, это не принципиально.
А вот такой вопрос: события @init и @show вешаются, соответственно, на ns-view-htmlinit-end и ns-view-show-end?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.