Flex-Mate, как создать всплывающее окно (диалог) с моделью - PullRequest
0 голосов
/ 09 марта 2010

Я использую MATE в проекте Adobe Flex для MVC. На одной из наших страниц у нас есть диалоговое окно, которое предоставляется пользователю и отображает информацию, полученную от RPC. Страницы, где появляется это диалоговое окно, не связаны с отображаемыми данными, поэтому это отдельная модель. Как создать файл сопоставления MATE, который создаст диалоговое окно, сделает его видимым для пользователя, а затем вставит данные из модели?

Спасибо за чтение.

1 Ответ

2 голосов
/ 26 мая 2010

Похоже, вы нашли подход, но если вас заинтересовала другая идея, на форумах Mate есть действительно хорошая ветка о том, как подходить к всплывающим окнам в Mate. Он включает в себя пример кода и обсуждает лучшие практики и причины, по которым делается определенный выбор:

Преобразование приложения с всплывающими окнами в Mate << Mate Forums </a>

Если я вас правильно понимаю, вот код, который делает то, что вам нужно (адаптировано из этой ветки). Он внедряет результат вызова 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>
...
...