Требуются общие рекомендации по архитектуре / логике Flex - PullRequest
1 голос
/ 05 октября 2010

У меня есть вопрос архитектуры / логики.Вот чего я хотел бы достичь:

  • a) У меня есть три кнопки в моем основном приложении.
  • b) При нажатии любой из кнопок открывается таможенный компонент на основе окна TitleWindow.
  • в) В заголовке окна есть селектор да / нет.
  • d) Если ответ «да», то я хочу изменить цвет кнопки, которая была нажата в основном приложении, на красный.Если ответ «нет», то с кнопкой в ​​главном приложении ничего не происходит.

Мой вопрос - каков наилучший / самый простой способ «запомнить», какая кнопка была нажата, и обработать «да»Нет вопросов.

Решение:

  • a) Создайте переменную с идентификатором кнопки, которая была нажата в главном приложении, и установите для открытой переменной в компоненте этот идентификатор

  • b) И затем создайте пользовательское событие в компоненте, который обрабатывает вопрос «да / нет».Пользовательское событие будет использовать идентификатор кнопки в качестве параметра и отправить его обратно в основное приложение.

Есть ли лучший / более простой способ сделать это?Правильно ли я подхожу к этому?Имеет ли смысл «отправить» идентификатор кнопки в компонент, а затем снова выйти обратно?

Спасибо.

-Laxmidi

Ответы [ 3 ]

1 голос
/ 05 октября 2010

Посмотрите на шаблон команды для этого.

Когда кнопка нажата, передайте ссылку на кнопку, которая была нажата, в команду.

Если вы используете Spring AS, что-то вроде этого ...

<mx:Button id="myButton1" click="EventBus.dispatchEvent(new CommandEvent('testButton', myButton1))" />

В команде выведите диалоговое окно, обработайте ответ и установите стиль для ссылки на кнопку, которую вы передали.

Это отделяет логику того, что вы делаете, от самого компонента пользовательского интерфейса (даже не нужно быть кнопкой, команда может принимать UIComponent).

Это также не оставляет состояние, лежащее вокруг вашего приложения, например, наличие последней кнопки, нажатой на кнопку, и т. Д., Поскольку все состояние выполняемой вами части логики заключено в команде.

Краткий псевдокод команды

public class TestUICommand implements Command, RequiresContext {
    private var _context : UIComponent;
    private var _dialog : MyDialog;

    // Your command controller would set the reference to the button here.
    public function set context( cxt : UIComponent ) : void {
        _context = cxt;
    }

    public function execute() : * {
        _dialog = new MyDialog();
        _dialog.popup();
        _dialog.addEventListener( "yes", doYes );
        _dialog.addEventListener( "no", closeDialog);
    }

    private function doYes( event : Event = null ) : void {
        _context.setStyle("color", 0xFF0000);
        closeDialog();
    }

    private function closeDialog( event : Event = null ) : void {
        _dialog.close();
    }
}
1 голос
/ 05 октября 2010

Вы можете сделать это очень легко без большого количества кодирования. Предполагая, что у вас есть разные окна TitleWindow, отображаемые для каждой кнопки, которую вы хотите сделать красной, вы просто заставляете кнопки «хотеть быть красными» предикатировать их styleName от состояния переключения нажатой кнопки в каждом окне заголовка. Вам, конечно, придется установить для свойства переключения кнопок TW значение true =, а затем получить их выбранное свойство.

Пример:

<mx:Button styleName="{titleWindow_01.yesButton.selected ? 'redStyle' : 'plainStyle'}" text="Blah"/>

А в вашем TitleWindow

<mx:Button id="yesButton" toggle="true" text="Yes"/>

Эти кнопки, очевидно, будут иметь другие атрибуты, но это дает вам представление о том, как легко это сделать без большого количества кодирования. Связывание произойдет автоматически, поэтому вам даже не нужно об этом беспокоиться.

1 голос
/ 05 октября 2010

Я бы предпочел иметь приватную переменную lastClickedButton в основном приложении и устанавливать ее при каждом нажатии одной из кнопок.При нажатии кнопки «Да» компонент TitleWindow отправляет обычное событие (с соответствующим типом события, скажем, YES_CLICKED), которое будет прослушивать основное приложение.Установите цвет lastClickedButton из обработчика событий.

Идея состоит в том, что какая кнопка была нажата - это информация, относящаяся только к основному приложению - компоненту TitleWindow нечего делатьс этим.Когда мы передаем идентификатор кнопки в TitleWindow, мы создаем ненужную зависимость от основного приложения.Если в будущем вы захотите повторно использовать компонент TitleWindow для какой-либо другой цели, эта переменная id кнопки станет там бессмысленной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...