Показать сообщение отдельно
Старый 12.06.2018, 15:36
robotR2D2 вне форума Посмотреть профиль Отправить личное сообщение для robotR2D2 Найти все сообщения от robotR2D2
  № 6  
Ответить с цитированием
robotR2D2

Регистрация: May 2016
Сообщений: 25
@ZergMaster, без минималистического примера - сложно понять. Что именно гарантирует, что во время выполнения одного стэка команд, не будет выполнен промежуточный стэк команд?

Цитата:
Сообщение от undefined Посмотреть сообщение
Насколько я помню события приходят в том порядке, в котором добовлялись слушатели
Цитата:
Сообщение от Tails Посмотреть сообщение
4 аргумент - priority
от порядка добавления слушателей порядок распространения событий (во множественном числе) не зависит вообще никак.

Цитата:
Сообщение от undefined Посмотреть сообщение
Можно минимальный пример когда события приходят не в том порядке?
А чем пример в первом посте не угодил? Есть родитель, который сперва получает событие добавленного "внука", а потом событие добавленного "сына". Да, родитель знает, что добавляет ребенка по addChild, но если в цепь добавить "деда", то у него поедет крыша, ведь сперва он узнает, что у него есть "правнук", а уже потом узнает, что есть "внук". Мне кажется - это не нормально.

Цитата:
Сообщение от Zebestov Посмотреть сообщение
В приведенном примере события отправляются совершенно упорядоченно: от самого вложенного (первое) до самого наружного (последнее).
Так-то оно так, но почему это считается нормальным? (если отмести сам факт того, что реализацию flash event system никак не исправить)
Если я сказал собеседнику две фразы, я ожидаю, что сперва он услышит первую фразу, а затем вторую. Однако событийная система такова, что к слушателю "фразы" прилетают рандомно. Это как читать книгу, предложения в которой перемешаны в случайном порядке.

Приведу пример, есть контроллер, который создает зеркальную иерархию от существующей иерархии. Он слушает BaseModel. Казалось бы, по "added" он создает зеркало-"узел" и крепит его к зеркало-родителю, ссылка на которого есть у event.target.parent (модель-эталон). Но проблема в том, что у parent - может не быть этой ссылки на зеркало, ведь он еще сам не имеет зеркального узла, потому что внутри addChild был вызван еще один addChild (в обработчике события "added").

Таким образом, я должен, понимая, что событийная система имеет изъян, искать в цепи parent первую "отзеркаленную" модельку и выстраивать иерархию от нее. Это же вынуждает меня проверять, а не был ли event.target "отзеркален" в предыдущем обработчике. Более того, в контроллер может прилететь другое важное событие от модельки (которое было испущено в ее обработчике "added") тогда как она сама еще не имеет зеркало, что существенно.

Я понимаю, что можно не испускать событий в обработчике "added" и не добавлять детей там же. Но речь не про самоограничения, а про работу событий так, как это должно быть с точки зрения здравого смысла.