flex: ссылка на вызывающий объект из всплывающего окна

#apache-flex #popup

#apache-flex #всплывающее окно

Вопрос:

У меня возникла ситуация, когда у меня на экране есть несколько изображений с присвоенными им бизнес-свойствами (значение, количество, qualitygrade). Когда я нажимаю на них, должно открыться всплывающее окно, позволяющее мне изменить свойства элемента под изображением. Как мне ссылаться на а) объект, который вызвал открытие всплывающего окна б) свойства объекта, которые размещены в массиве — как для первоначального просмотра, так и для изменения

У меня включены изображения для двойного щелчка следующим образом

 newImage.doubleClickEnabled=true;
newImage.addEventListener(MouseEvent.DOUBLE_CLICK,createModifyPopUp);
  

В настоящее время я вызываю всплывающее окно следующим образом

 private function createModifyPopUp(evt:MouseEvent):void{
var mywin1:Modify=PopUpManager.createPopUp(this,Modify,true) as Modify;
PopUpManager.centerPopUp(mywin1);
}
  

Кажется, я не передаю событие во всплывающее окно — Есть ли способ, которым я могу работать на основе изображения, щелкнутого в исходном приложении, для создания и захвата информации в modify.

Ответ №1:

просто используйте PopUpManager.addPopup вместо PopUpManager.createPopup

ваш пример должен выглядеть следующим образом:

 //define properties in the Modify class (Modify.as3 or Modify.mxml)
public var someData: Array;
public var eventTarget: Object;


// listener
private function createModifyPopUp(evt:MouseEvent):void{
   var modify: Modify = new Modify();
   // pass parameters to the instance of Modify class
   modify.someData = arr;
   modify.eventTarget = evt.target;

   // show popup
   PopUpManager.addPopUp(modify, this, true);
   PopUpManager.centerPopUp(modify);
}
  

Комментарии:

1. Спасибо aav — просто чтобы лучше понять это. Если у меня есть массив с именем ‘arr’, который содержит свойства, я понимаю, что я должен установить modify.somedata в arr; и в классе mxml ‘modify’ я изменю значения на somedata. Кроме того, evt.currentTarget будет работать в классе modify . Это правильно?

2. 1. конечно, вы должны определить свойство someData в классе Modify 2. evt.currentTarget не будет виден из класса Modify, если вы не передадите его туда. Я обновил свой ответ с помощью bette

3. Привет: похоже, всплывающий объект не создается

4. Привет: похоже, всплывающий объект не создается: при запуске и инициализации createModifyPopUp выдается ошибка времени выполнения Ошибка # 1009: не удается получить доступ к свойству или методу нулевой ссылки на объект. в mx.managers::PopUpManagerImpl/centerPopUp()[E:dev4.0.0frameworksprojectsframeworksrcmxmanagersPopUpManagerImpl.as:491 ] в mx.managers::PopUpManager$/centerPopUp()[E:dev4.0.0frameworksprojectsframeworksrcmxmanagersPopUpManager.as:213 ] в<строка соответствует PopUpManager.centerPopUp(mywin1)> — mywin1 не создается — это связано с addPopUp vs create — есть идеи, почему?

5. всплывающее окно создается вашим кодом (… = new Modify(); ). я думаю, что проблема в том, что addPopUp ничего не возвращает (моя ошибка в первоначальном примере). но в этом нет необходимости, поскольку у вас есть ссылка во всплывающем окне. взгляните на обновленный пример.