#apache-flex #flash-builder #flexbuilder #flex4.5
#apache-flex #flash-builder #flexbuilder #flex4.5
Вопрос:
У нас есть приложение flex, которое подключается к прокси-серверу, который обрабатывает аутентификацию. Если время ожидания проверки подлинности истекло, прокси-сервер возвращает строку ошибки в формате json. Что я хотел бы сделать, так это проверить каждый ответ URLRequest и проверить, есть ли сообщение об ошибке, и отобразить его в клиенте flex, а затем перенаправить обратно на экран входа в систему.
Итак, мне интересно, возможно ли создать прослушиватель событий для всех URLRequests глобальным образом. Без необходимости поиска по проекту и добавления какого-либо метода к каждому URLRequest. Есть идеи, возможно ли это?
Ответ №1:
Если вы не используете только одну службу, невозможно установить глобальный обработчик URLRequest. На вашем месте я бы больше подумал о правильной архитектуре вашего приложения с помощью делегата и всегда проверял результат с помощью определенной службы, которая используется во всем приложении.
Комментарии:
1. К сожалению, и, возможно, неудивительно, что это большой унаследованный внешний беспорядок кода. О перестройке архитектуры не может быть и речи
2. @RueTheWhirled Вам все равно придется их менять… может быть, вам следует воспользоваться возможностью немного реорганизовать код и ввести делегата?
Ответ №2:
У J_A_X есть несколько хороших предложений, но я бы пошел немного дальше. Позвольте мне сделать некоторые предположения, основанные на ограниченной информации, которую вы предоставили.
- Службы разбросаны по всему вашему приложению, что означает, что они фактически встроены в несколько представлений.
- Если все ваши службы могут обрабатываться одним и тем же обработчиком, у вас условно есть одна служба, скопированная много раз.
Несмотря на то, что вы видите в примерах Adobe, демонстрирующих их новый код генерации сервисов, вызывать службы напрямую из представлений невероятно плохая практика, отчасти из-за той самой проблемы, которую вы видите — вы можете получить множество копий одного и того же кода службы, разбросанных по всему вашему приложению.
В зависимости от того, насколько тесно переплетено ваше приложение (поверьте мне, я унаследовал некоторые довольно неприятные вещи, поэтому я знаю, что это может быть легче сказать, чем сделать), вы можете обнаружить, что проще всего удалить все эти различные службы и заменить их, заставив все ваши представления отправлять всплывающее событие, котороепопадает на верхний уровень. На верхнем уровне вы реагируете на это событие, вызывая один экземпляр вашей службы, который снова обрабатывается в одном месте.
Вы можете или не можете выбрать, чтобы обернуть эту единственную службу в делегате, но как только вы спроектируете свое приложение таким образом, чтобы служба была отделена от ваших представлений, вы можете сделать этот выбор в любое время.
Ответ №3:
Сможете ли вы расширить класс и добавить прослушиватель событий в конструктор объекта? Мне не нравится этот подход, но он может сработать.
Вам просто нужно будет выполнить поиск / заменить весь проект.