我有一个包含数据网格的 Web 应用程序。双击该网格的任何行将打开一个弹出窗口(我们称之为 popup1)。现在这个 popup1 再次打开一个新的 popup(我们称之为 popup2)。
当我关闭 popup2 时,我需要将一个对象传递给 popup1。哪种方法最简单?
提前致谢
(PS:从popup1打开popup2时,我在popup2的Close事件上添加了一个事件监听器)
我有一个包含数据网格的 Web 应用程序。双击该网格的任何行将打开一个弹出窗口(我们称之为 popup1)。现在这个 popup1 再次打开一个新的 popup(我们称之为 popup2)。
当我关闭 popup2 时,我需要将一个对象传递给 popup1。哪种方法最简单?
提前致谢
(PS:从popup1打开popup2时,我在popup2的Close事件上添加了一个事件监听器)
我会创建一个自定义事件,当 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);
恕我直言,建议的解决方案 bu @ajay87 是错误的。
popup1 不应该“知道”popup2,它们应该被解耦,视图不应该在其他视图中调用函数。
这种行为应该使用事件来实现,您应该打开 popup2 然后调度和事件(在弹出窗口 2 中收听)。
反之亦然,您应该使用从弹出窗口 2 调度的事件获取数据,而不是激活函数或其他类似的东西。
这样,您的视图将解耦并且不会中断您更改实现,此外,您将能够在没有此功能的情况下显示弹出窗口 2,反之亦然。
我将创建并调用一个新函数,该函数将创建 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);
}
这是这样做的一种方式。