我在 MVC 的 Adobe Flex 项目中使用 MATE。在我们的一个页面上,我们有一个向用户显示的对话框窗口,向他们显示来自 RPC 的信息。弹出此对话框的页面与显示的数据无关,因此这是一个单独的模型。如何创建一个 MATE 映射文件来创建对话窗口,使其对用户可见,然后从模型中注入数据?
谢谢阅读。
我在 MVC 的 Adobe Flex 项目中使用 MATE。在我们的一个页面上,我们有一个向用户显示的对话框窗口,向他们显示来自 RPC 的信息。弹出此对话框的页面与显示的数据无关,因此这是一个单独的模型。如何创建一个 MATE 映射文件来创建对话窗口,使其对用户可见,然后从模型中注入数据?
谢谢阅读。
似乎您找到了一种方法,但如果您对另一个想法感兴趣,那么 Mate 论坛上有一个关于如何在 Mate 中处理弹出窗口的非常好的帖子。它包括一些示例代码,并讨论了所涉及的最佳实践以及做出某些选择的原因:
将带有弹出窗口的应用程序转换为 Mate << Mate 论坛
如果我对您的理解正确,这里有一些代码可以满足您的需要(改编自该线程)。它将 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>
...