2

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

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

提前致谢

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

4

3 回答 3

2

我会创建一个自定义事件,当 popup2 关闭时你会触发。就在您关闭 popup2 之前,将您的数据添加到事件并触发它。Popup1 将具有 MyCustomEvent 的事件侦听器,并且可以访问 myDataToPass 属性。就像是:

我的自定义事件:

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);
于 2010-12-07T17:00:12.107 回答
0

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

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

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

反之亦然,您应该使用从弹出窗口 2 调度的事件获取数据,而不是激活函数或其他类似的东西。

这样,您的视图将解耦并且不会中断您更改实现,此外,您将能够在没有此功能的情况下显示弹出窗口 2,反之亦然。

于 2010-12-07T13:52:54.107 回答
-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);

    }

这是这样做的一种方式。

于 2010-12-07T09:52:21.310 回答