我有一个包含数据网格的Web应用程序。双击该网格的任何一行将打开一个弹出窗口(让我们称之为popup1)。现在这个popup1再次打开一个新的弹出窗口(让我们称之为popup2)。
当我关闭popup2时,我需要将一个Object传递给popup1。哪种方法最简单?
先谢谢
(PS:从popup1打开popup2时,我在popup2的Close事件上添加一个事件监听器)
答案 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);
}
这是这样做的一种方式。