将数据从弹出窗口传递到Flex中的弹出窗口

时间:2010-12-07 09:44:03

标签: flex popup message-passing

我有一个包含数据网格的Web应用程序。双击该网格的任何一行将打开一个弹出窗口(让我们称之为popup1)。现在这个popup1再次打开一个新的弹出窗口(让我们称之为popup2)。

当我关闭popup2时,我需要将一个Object传递给popup1。哪种方法最简单?

先谢谢

(PS:从popup1打开popup2时,我在popup2的Close事件上添加一个事件监听器)

3 个答案:

答案 0 :(得分:2)

我会创建一个自定义事件,当popup2关闭时你会触发它。在关闭popup2之前,将您的数据添加到事件中并将其关闭。 Popup1将拥有MyCustomEvent的事件监听器,并且可以访问myDataToPass属性。类似的东西:

<强> MyCustomEvent:

package
{           
    import flash.events.Event;
    import mx.collections.ArrayCollection;

    public class MyCustomEvent extends Event
    {
        public var myDataToPass:ArrayCollection;

        public function MyCustomEvent (type:String, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
    }
}

传递数据:

var newEvent:MyCustomEvent = new MyCustomEvent();
newEvent.myDataToPass = <your data here>;
dispatchEvent(newEvent);

答案 1 :(得分:0)

恕我直言,解决方案建议bu @ ajay87错了。

popup1不应该“知道”popup2,它们应该被解耦,视图不应该在其他视图中调用函数。

这种行为应该使用事件来实现,你应该打开popup2然后调度和事件(在弹出窗口2中听它)。

反过来是相同的,你应该使用从弹出窗口2调度的事件来获取数据,而不是激活函数或其他任何类似的东西。

通过这种方式,您的视图会被分离并且不会破坏您更改实现,此外,您将能够显示没有此功能的弹出窗口2,反之亦然。

答案 2 :(得分:-1)

我只是制作并调用一个新函数,它将生成popup2窗口(通过PopUpManager)并将对象传递给此函数。然后可以从对象填充popup2的子项(可能是标题窗口或面板的自定义组件),或者可以将对象传递给它。

  private function displayPopUp2(object:Object):void
    {
    //create an instance of your window
     var popup2:CustomComponentPopUp2 = new CustomComponentPopUp2();
    //pass the object data to a function within side this to populate fields, or this could be done through constructor.

     popup2.populateData(object);

    //then use popup manager to display popup... passing the popup2 as it's child.
    PopUpManager.addPopUp(popup2);

    }

这是这样做的一种方式。