【问题标题】:Flex-Mate, How To Back PopUp (Dialog) With A ModelFlex-Mate,如何使用模型支持弹出窗口(对话框)
【发布时间】:2010-05-28 22:45:14
【问题描述】:

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

感谢阅读。

【问题讨论】:

    标签: apache-flex model-view-controller adobe mate


    【解决方案1】:

    您似乎找到了一种方法,但如果您对另一个想法感兴趣,那么 Mate 论坛上有一个关于如何在 Mate 中处理弹出窗口的非常好的帖子。它包括一些示例代码,并讨论了所涉及的最佳实践以及做出某些选择的原因:

    Converting app with popups to Mate << Mate Forums

    如果我对您的理解正确,这里有一些代码可以满足您的需要(改编自该线程)。它将 RPC 调用的结果注入到视图中(保持地图不知道视图如何显示该数据),并且视图将在有数据时创建弹出窗口,并在没有数据时删除弹出窗口。该线程对大部分代码都有进一步的解释。

    事件映射:

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

    弹出父视图: ...

    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>
    ...
    

    【讨论】:

    • 是的,好点——我从线程中提取了一些代码(根据我以前使用过的方式进行了调整)。让我知道这是否有帮助。
    • 感谢布赖恩的帮助!我创建了一个不从任何可视组件继承的裸 ActionScript 类,它的唯一目的是按照您在答案中的描述处理 popUpManager。如果其他人采用这种方法,请确保在 MATE 中捕获 FlexEvent.INITIALIZE 事件并在处理程序中使用 MATE ObjectBuilder 标签实例化您创建的对象的实例,因为它不会作为一部分自动创建视图。
    • 好点。另一种选择(取决于您的视图的结构)是将此代码放在现有的视图组件上。例如,您在顶部有一个标题,所有弹出窗口都是出现的小通知。此代码可能位于 Header.mxml 文件中,它只定义了它如何处理通知数据的更改(在本例中通过显示弹出窗口)。只是把它扔在那里 - 你提到的策略似乎也很干净。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多