Утро
Я использую шину SimpleEvent
для отправки данных из моего централизованного средства восстановления данных в виджеты. Это работает очень хорошо, я получаю один набор новых данных с сервера, метод успеха вызова RPC помещает их в Eventbus, каждый виджет ищет данные для них, если да, то «отображает» их, если нет, он ничего не делает. Существует только один набор данных на запрос, и виджеты не зависят от других данных, которые уже отправлены.
Теперь у меня есть виджет Tree. Дочерние узлы дерева создаются и для этих наборов данных, и эти дочерние узлы регистрируются в Eventbus для восстановления данных для своих дочерних узлов. Данные должны быть получены в срочном порядке (по соображениям производительности), поэтому я получу несколько наборов данных, которые будут помещены в шину Eventbus одновременно (в цикле for). Я контролирую только порядок, в котором они там находятся (сначала корень, затем данные для первого ребенка ......). Как Eventbus теперь обрабатывает события?
- Ожидает ли он, пока первое событие не будет завершено, поэтому первый ребенок
дерево уже завершено создание и зарегистрировать себя в
Eventbus, чтобы оживить данные, чтобы создать его ребенка.
- Он обрабатывает их одновременно, поэтому виджет даже не регистрируется в Eventbus.
- Он перепутал заказ?!?!
Подходы к текущему решению:
- Лучшее решение, которое я могу придумать, - это помещать только новые события в
Eventbus, когда предыдущий закончен. Однако я нашел способ
который делает это, или если это стандартное поведение Eventbus.
- Запустить событие обработки запроса, когда событие было обработано виджетом. Удачи ... это приводит к большому количеству дополнительного кода и вызывает большие проблемы, когда данные помещаются в Eventbus, который не принадлежит ни одному виджету ....
- Зарегистрировать статическую переменную, которая устанавливается в значение true, когда запрос обрабатывается, и Eventbus ждет так долго, пока он не отправит следующий запрос на Eventbus (тихо, как два, но гораздо хуже стиль кодирования и те же проблемы)
- Все события обрабатываются корневым элементом дерева, который отправляет их вверх соответствующим дочерним элементам.
Какое решение вы бы предпочли и почему?
С уважением,
Stefan
PS: мой любимый ответ: 1. Стандартное поведение Eventbus ^^
PPS: Решение также должно работать при представлении веб-работников.