Мне кажется, что вы отчаянно нуждаетесь в RobotLegs, вы, кажется, спрашиваете, как создать / использовать систему шины событий, чтобы отключить ваши компоненты, и это именно то, что удивительно в робототехнике.
Одна вещь, на которую вам обязательно стоит обратить внимание - это ActionScript 3 Signals. Сигналы - это подход к созданию строго типизированных событий, таких как .NET Framework, вместо системы событий волшебных строк, и это фантастическое легкое дополнение к любому проекту Flash / Flex.
Другим распространенным способом является одноэлементный паттерн медиатор / контроллер. Допустим, это автомобильное приложение, и у нас есть сервисный уровень, который за кулисами получает некоторые данные с сервера, в то время как наше всплывающее окно отстает от отображаемого. Одним из способов решения этой проблемы является создание одноэлементного контроллера для наших данных, такого как PartsController. Он также имеет несколько публичных константных сигналов типа SingalDataUpdated
. Теперь всплывающее окно может сделать что-то вроде PartsController.SignalDataUpdated.add(OnPartsUpdated)
. OnPartsUpdated
- это локальный метод внутри всплывающего окна, который теперь может реагировать на событие по мере необходимости и не связан с каким-либо другим компонентом пользовательского интерфейса. Обычно это тот подход, который мы применяем и который гарантирует, что ни один компонент пользовательского интерфейса не имеет явных сведений о каком-либо другом компоненте пользовательского интерфейса, а вместо этого общается только с контроллерами. Однако необходимо убедиться, что при закрытии всплывающего окна удалить список сигналов.
Опять же, RobotLegs делает больше всего этого для вас и поощряет некоторые очень хорошие архитектурные лучшие практики. Я очень рекомендую вам прочитать их документацию и ознакомиться с ней. Это изменит вашу жизнь, когда вы поймете, насколько модульным и обслуживаемым он помогает создавать ваш код.
Удачи!
Обновление относительно контекста и синглетонов
Идея относительно контекста состоит в том, чтобы создать единственный синглтон, известный как контекст вашего приложения, который хранит экземпляры того, что будет вашими другими синглетонами. Инверсия управления (IoC) и RobotLegs просто соединяют все вместе, так что это не выглядит абсолютной ерундой для работы, но вы можете просто использовать простой инжектор IoC, такой как Swiz или SwiftSuspenders , на которых построен RobotLegs. Так, например, вы можете нажать конкретный контроллер, например:
AppContext.Instance.ProductController.SignalProductAdded.add(OnProductAdded);
Но немного нелепо пытаться получить доступ ко всему таким образом. Здесь на помощь приходит RobotLegs. Вместо этого определите правила внедрения в контексте RobotLegs, поэтому, если компонент запрашивает UserController через тег метаданных ввода, все получает тот же UserController. Точно как синглтон, но правильно, так что в вашем компоненте определите;
[Inject] public var _objProductController:ProductController;
Теперь ваш компонент может работать с объектом контроллера, как если бы он был его собственным, но вместо этого он был добавлен RobotLegs при создании. Для меня и большинства моих продуктов я создаю несколько базовых объектов, таких как GroupBase
, PanelBase
, PopupPanelBase
и т. Д., Которые расширяют надлежащий компонент и уже имеют все свойства ввода контроллера, поэтому любой компонент, полученный из них, уже подключен к соответствующим контроллерам по мере необходимости.
Для вашего простого проекта все равно, что проще свернуть свой собственный и просто создать единый синглтон для вашего контекста, который будет содержать ваши контроллеры и таким образом взаимодействовать с контекстом приложения. Все это довольно высокоуровневые архитектурные решения, и на этом уровне все работают по-разному в зависимости от своего опыта, предпочтений или чего-то еще. Самое главное, что это работает для вас, и вы знакомы с архитектурой. RobotLegs помогает сделать все очень отделенным, что дает некоторые удивительные непредвиденные преимущества позже.
Удачи!