Flex-Mate, как создать всплывающее окно (диалог) с моделью
Я использую MATE в проекте Adobe Flex для MVC. На одной из наших страниц у нас есть диалоговое окно, которое предоставляется пользователю и отображает информацию, полученную от RPC. Страницы, где появляется это диалоговое окно, не связаны с отображаемыми данными, поэтому это отдельная модель. Как создать файл сопоставления MATE, который создаст диалоговое окно, сделает его видимым для пользователя, а затем вставит данные из модели?
Спасибо за прочтение.
1 ответ
Похоже, вы нашли подход, но если вас заинтересовала другая идея, на форумах Mate есть действительно хорошая ветка о том, как подходить к всплывающим окнам в Mate. Он включает в себя пример кода и обсуждает лучшие практики и причины, по которым делается определенный выбор:
Преобразование приложения с всплывающими окнами в 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>
...