Flex: как передать значение из окна заголовка в главное окно после закрытия окна заголовка? - PullRequest
0 голосов
/ 23 февраля 2009

Я искал это в сети, но я не нашел ответа. У меня есть данные массива из окна заголовка, которые мне нужно передать непосредственно в главное окно после закрытия окна заголовка.

Вот мой код в главном окне

    private function showWindow():void 
    {
    var dataCntnrsForTxt: Array = new Array;
    var ttlWindow:addQuest=addQuest(PopUpManager.createPopUp(this, addQuest, true));

    pointer.x=btnaddQuestion.x;
    pointer.y=btnaddQuestion.y;                
    pointer=btnaddQuestion.localToGlobal(pointer);
    ttlWindow.x=pointer.x-500;
    ttlWindow.y=pointer.y;


    ttlWindow.dataCntnrsForTxt= dataCntnrsForTxt;                      

    var i: int;
    for (i = 0; i < dataCntnrsForTxt.length; i++)
{
  var lblshow: Label = new Label;
      lblcntnrs.addChild(lblshow);
      lblshow.text = dataCntnrsForTxt[i];       
    }


   }

я хочу автоматически отобразить результат в главном окне после закрытия окна заголовка

вот код в окне заголовка

  [Bindable]
  public var dataCntnrsForTxt: Array = new Array;

  private function trythis():void
  {
  var i:int;
  for (i = 0; i < contnrs.numChildren; i++)
   {
    dataCntnrsForTxt.push(TextInput(contnrs2.getChildAt(i)).text);             
   }
  PopUpManager.removePopUp(this);
  } 

Я новичок в программировании flex. Заранее благодарю за помощь

Ответы [ 3 ]

3 голосов
/ 23 февраля 2009

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

2 голосов
/ 23 февраля 2009

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

Создание массива общедоступной привязываемой переменной в главном окне и заполнение его из окна заголовка - это второй способ, но мне не нравится этот подход, потому что два компонента слишком много знают друг о друге, и вы полагаетесь на данные привязка, которая, вероятно, будет делать больше, чем нужно на самом деле (например, если вы привязываете элемент управления в главном окне к тому же массиву, он будет занят обновлением в фоновом режиме, пока отображается окно заголовка. Это означает, что у вас есть неудобное «Отмена» "иметь дело, если вам нужно).

Просто чтобы дать вам третий подход, вы можете передать функцию в окно заголовка, которая вызывается при закрытии окна. например в вашем окне заголовка у вас есть объявление ...

public var onClose:Function;

напишите себе обработчик в окне заголовка, связанный с событием close, которое вызывает внешнюю функцию и передает массив ...

private function doClose():void
{
    if (onClose != null) onClose(myArray);
}

В этом случае вызывающая сторона должна иметь функцию, которую можно вызвать ...

private function handleTitleWindowClose(myArray:Array):void
{
    // do something in here
}

и вы передаете это классу TitleWindow, прежде чем показать его ...

ttlWindow.onClose = handleTitleWindowClose;

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

НТН

0 голосов
/ 23 февраля 2009
var dataCntnrsForTxt: Array = new Array;

Это локальная переменная, область ее действия ограничена функцией showWindow(). Как только вы вышли из этого, вы не должны играть с ним. Или же вы можете вернуть это из функции (вместо void используйте Array).

[Bindable]
public var dataCntnrsForTxt: Array = new Array;

Это лучше. Теперь вы можете получить к нему доступ из любого места. Обратите внимание, всегда лучше использовать ArrayCollection, если вы собираетесь связать его. Вот документация Flex 3.2 :

При определении выражения привязки данных, которое использует массив в качестве источника выражения привязки данных, массив должен иметь тип ArrayCollection, поскольку класс ArrayCollection отправляет событие, когда массив или элементы массива изменяются, чтобы инициировать привязку данных. Например, вызов ArrayCollection.addItem (), ArrayCollection.addItemAt (), ArrayCollection.removeItem () и ArrayCollection.removeItemAt () - все они инициируют привязку данных.

Можете ли вы попробовать с ArrayCollection?

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