@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" и не добавлять детей там же. Но речь не про самоограничения, а про работу событий так, как это должно быть с точки зрения здравого смысла.