2010-03-09 62 views
0

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

感谢您的阅读。

回答

2

好像你找到了一个办法,但如果你有兴趣的另一个想法,有关于如何在择偶接近弹出窗口的伴侣论坛一个很好的线索。它包括一些示例代码,并讨论所涉及的最佳实践,以及为什么某些选择正在作出:

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

+1不是一个答案,但一个很好的起点。谢谢! – davidemm 2010-05-27 20:40:41

+0

是的好点 - 我从线程中拉出了一些代码(改编为我之前使用的代码)。让我知道这是否有帮助。 – Brian 2010-05-28 14:46:33

+0

感谢Brian的帮助!我创建了一个没有从任何可视组件继承的纯ActionScript类,它的唯一目的是按照您在答案中描述的方式处理popUpManager。如果另外一个人采取了这种办法,确保在MATE,你赶上FlexEvent.INITIALIZE事件和处理程序中,使用MATE ObjectBuilder的标签实例创建,因为它不会自动为部分中创建的对象的实例的看法。 – davidemm 2010-06-04 18:39:17