Вдохновленный ленивыми способностями загрузки Hibernate, я хотел сделать модель частью моего Flex UI, запрашивая данные с сервера, только когда это необходимо. Я думал, что это будет так же просто, как добавление общедоступного метода доступа, который отправляет запросы к серверу только при обращении к переменной.
public function get tab2AC():ArrayCollection
{
if(_tab2AC == null){
//Request data from server
}
return _tab2AC;
}
Проблема в том, что Flex, кажется, обращается к всем связанным переменным при запуске приложения, даже если ссылочный компонент еще не создан. Таким образом, даже если DataGrid с dataProvider="{tab2AC}"
еще не создан, запрос к серверу по-прежнему отправляется, что устраняет лень «только при необходимости».
Я не хочу помещать запрос на сервер в обработчик creationComplete, поскольку хочу, чтобы моя модель пользовательского интерфейса не учитывала состояние просмотра, а мое представление - о запросах к серверу.
Интересно, что если я добавлю Alert.show("anything");
внутри метода доступа, он будет работать как нужно.
ОБНОВЛЕНИЕ: вот полный пример. Установите точки останова, и вы увидите, что Flex обращается к обеим переменным, даже если titleForScreen2 не используется ни одним из созданных компонентов.
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
private var _titleForScreen1:String;
private var _titleForScreen2:String;
public function get titleForScreen1():String {
if(_titleForScreen1 == null){
//Server Request
}
return _titleForScreen1;
}
public function get titleForScreen2():String {
if(_titleForScreen2 == null){
//Server Request
}
return _titleForScreen2;
}
]]>
</fx:Script>
<mx:ViewStack>
<s:NavigatorContent label="Screen 1">
<s:Label text="{titleForScreen1}"/>
</s:NavigatorContent>
<s:NavigatorContent label="Screen 2">
<s:Label text="{titleForScreen2}"/>
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>