Flex-Mate,如何使用模型返回PopUp(对话框)

时间:2010-03-09 20:27:27

标签: flex model-view-controller adobe mate

我在MVC的Adobe Flex项目中使用MATE。在我们的一个页面上,我们有一个对话窗口,显示给用户,显示来自RPC的信息。弹出此对话框的页面与显示的数据无关,因此这是一个单独的模型。如何创建一个MATE映射文件,该文件将创建对话框窗口,使其对用户可见,然后从模型中注入数据?

感谢阅读。

1 个答案:

答案 0 :(得分:2)

似乎你找到了一种方法,但如果你对另一个想法感兴趣,那么在Mate论坛上有一个关于如何在Mate中接近弹出窗口的非常好的线程。它包含一些示例代码,并讨论了所涉及的最佳实践以及为什么要做出某些选择:

Converting app with popups to Mate << Mate Forums

如果我理解正确,这里有一些代码可以做你需要的(从那个线程改编)。它将RPC调用的结果注入到视图中(使映射不知道视图如何显示该数据),并且视图将在有数据时创建弹出窗口,并在没有数据时删除弹出窗口。该主题进一步解释了大部分代码。

EventMap:

<Injectors target="{PopupParentView}">
    <PropertyInjector destinationKey="rpcData" 
                      source="{FooManager}" sourceKey="rpcData" />
 </Injectors>

PopupParentView:     ...     

private var popup : UIComponent;

private var rpcData : Object;

private function onPreinitialize( event : Event ) : void {
    BindingUtils.bindSetter(rpcDataChanged, this, "rpcData");
}

private function rpcDataChanged( value : Object ) : void {
    invalidateProperties();
}

override protected function commitProperties( ) : void {
    // two mutually exclusive branches: either the property can be interpreted as "show the popup"
    // and the popup doesn't exist, or we shouldn't show the popup, but it does exist. all other
    if ( rpcData != null && popup == null ) {
        popup = PopUpManager.createPopUp(...);
    } else if ( rpcData == null && popup != null ) {
        // make sure to set the popup property to null
            PopUpManager.removePopUp(popup);
            popup = null;
    }
}
</Script>
...