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