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>
...
Другие вопросы по тегам