Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 带参数的空中调度事件_Actionscript 3_Apache Flex_Air - Fatal编程技术网

Actionscript 3 带参数的空中调度事件

Actionscript 3 带参数的空中调度事件,actionscript-3,apache-flex,air,Actionscript 3,Apache Flex,Air,我有一个带有搜索字段的表单。 当用户按enter键时,我使用httpservice向mySQL数据库发送查询。 在某些情况下(很多),会有多条记录,因此会打开一个新窗口,用datagrid显示这些记录,让用户选择好的结果 我的问题是如何将所选信息发送到第一个窗口(带有文本字段)。 我认为分派事件是一种方式,但我不知道如何使用 你能帮我找到解决办法吗 谢谢如果您试图在MDI环境中进行通信,我建议您使用某种共享模型(也称为中介或表示模型),在所需的窗口之间保持契约 class SelectionPM

我有一个带有搜索字段的表单。 当用户按enter键时,我使用httpservice向mySQL数据库发送查询。 在某些情况下(很多),会有多条记录,因此会打开一个新窗口,用datagrid显示这些记录,让用户选择好的结果

我的问题是如何将所选信息发送到第一个窗口(带有文本字段)。 我认为分派事件是一种方式,但我不知道如何使用

你能帮我找到解决办法吗


谢谢

如果您试图在MDI环境中进行通信,我建议您使用某种共享模型(也称为中介或表示模型),在所需的窗口之间保持契约

class SelectionPM{
     [Bindable]
     public var selectedItem:Object;
}
用例:

Window1有一个SelectionPM实例,当您打开Window2时,您将通过它 将SelectionPM实例添加到它,然后更新SelectionPM.selectedItem 属性更改Window2数据网格中的选择。那将 将绑定链传播到Window1,在那里可以使用 选择pm。根据需要选择editem

理想情况下,您可以使用IoC容器进行模型注入,但这是另一回事

这似乎是一个很大的工作,但如果你在你的应用程序中保持这种方法,你将从中受益


干杯

这里有一组四个类作为基础。显然,您不希望在构造函数中执行以下实际工作

public class App
{
    public static var eventDispatcher:EventDispatcher = new EventDispatcher();
    public function App()
    {
        new Window1();
    }
}

class AppEvent extends Event
{
    public static const DATA_READY:String = "APPEVENT.DATA_READY";
    public var data:Object;
    public function AppEvent( type:String, data:Object )
    {
        super( type );
        this.data = data;
    }
}

class Window1
{
    public function Window1()
    {
        App.eventDispatcher.addEventListener( AppEvent.DATA_READY, onDataReady );
        ...DO STUFF...
        new Window2();
    }
    private function onDataReady( evt:AppEvent ) : void
    {
        ...DO STUFF WITH "evt.data"....
    }
}

class Window2
{
    public function Window2()
    {
        ...GET DATA FROM SERVER AND PUT IT IN "data"...
        App.eventDispatcher.dispatchEvent( new AppEvent( AppEvent.DATA_READY, data ) );
    }
}
</pre>
公共类应用程序
{
公共静态var eventDispatcher:eventDispatcher=neweventdispatcher();
公共功能应用程序()
{
新窗口1();
}
}
类AppEvent扩展事件
{
public static const DATA_READY:String=“APPEVENT.DATA_READY”;
公共var数据:对象;
公共函数AppEvent(类型:字符串,数据:对象)
{
超级(型);
这个数据=数据;
}
}
类窗口1
{
公共函数Window1()
{
App.eventDispatcher.addEventListener(AppEvent.DATA_READY,onDataReady);
…做事。。。
新窗口2();
}
私有函数onDataReady(evt:AppEvent):无效
{
…使用“evt.data”进行操作。。。。
}
}
类窗口2
{
公共功能窗口2()
{
…从服务器获取数据并将其放入“数据”中。。。
App.eventDispatcher.dispatchEvent(新AppEvent(AppEvent.DATA_READY,DATA));
}
}

如何创建新窗口?这真的是一个新的本地窗口吗?或者您是在泛指应用程序中的另一个屏幕吗?不确定我是否正确理解您的意思,但下面是:子类事件,以便它可以包含一个数据字段,并在“其他”窗口中调度第一个窗口是一个自定义窗口扩展窗口(使用myCustomWindo.open(true)创建)。对于第二个窗口,我在弹出PopUpManager.createPopUp(这是TextAreaWindow)和其他选项之间犹豫不决。其他选项是创建一个窗口作为第一个窗口。感谢您的回答,但对于像我这样的新手来说,这似乎很难;-)