PDA

Просмотр полной версии : Сохранение объектов на View при переходах между ними


Astraport
24.01.2012, 19:45
Допустим у меня на одном View добавляется программно несколько DisplayObjects. Мне нужно вернуться на предыдущий View или на любой другой, но так чтобы все эти объекты остались, т. к. потом будет возврат и добавление новых объектов. Можно конечно все их сохранять с координатами потом опять размещать, но есть такой текст http://corlan.org/2011/01/12/understanding-flex-mobile-views-and-viewnavigator/

Там прямо написано, что можно все сохранить, если выставить у view параметр destructionPolicy="never" (по ссылке, кстати, он пишет про "none", но это видимо старая версия), то все сохранится в памяти. А вот sessionCachingEnabled вообще такого нет свойства у ViewNavigatorApplication.

В общем вопрос в том что и с destructionPolicy="never" не работает сохранение всех этих объектов.

alatar
24.01.2012, 21:15
sessionCachingEnabled переименовали в persistNavigatorState

Astraport
24.01.2012, 22:17
Угу, теперь свойство появилось, спасибо.

Но как оказалось оно мне не нужно - оно вообще кэширует все приложение, если, например, поставить persistNavigatorState = 'true', то при полном закрытии приложения во время активного View со всеми добавленными элементами и при новом открытии откроется именно это View и элементы будут присутствовать. Может быть и пригодится, но мне нужно совсем другое - чтобы при переходах между View на одном из них оставались в целости и сохранности все добавленные элементы.

По справке за это отвечает destructionPolicy, но не работает. Может быть нужно как-то по другому вызывать View? Я делаю например navigator.pushView(views.ColorPickerView, obj);

alatar
25.01.2012, 12:55
Я делаю например navigator.pushView(views.ColorPickerView, obj);
В таком случае вы должны восстановить состояние исходя из информации в obj. Вы же первым параметром передаете класс, откуда там возьмется состояние?

Astraport
25.01.2012, 13:07
В таком случае вы должны восстановить состояние исходя из информации в obj.
Так и делаю, но тогда зачем нужен destructionPolicy? Думал, он поможет.

alatar
25.01.2012, 13:28
Возможно он имеет значение для TabbedViewNavigator, досконально не разбирался.

Astraport
25.01.2012, 15:23
Он для ViewNavigator тоже работает, но в плане компонентов создаваемых MXML только. Например, если перейти с List на другой View, то при возвращении обратно выбранный итем будет выделен. Но для программно добавляемых компонентов - нет.

alatar
25.01.2012, 16:25
Тогда и при программном добавлении работает. Но вы же добавляете новые View, со всеми вытекающими.

Astraport
25.01.2012, 19:31
Но вы же добавляете новые View, со всеми вытекающими.
А разве есть способ не добавлять новых View?
Мне вот нужно из главного вью, где создается допустим блок-схема из разных элементов, по клику на элемент схемы вызвать вью с настройками (цвет, толщина линий, текст), в этом вью все что нужно изменить и вернуться обратно назад на главное вью и внести изменения в редактируемом элементе блок-схемы.
Сейчас я все элементы, их свойства и координаты пишу в глобальный ArrayCollection при каждом таком вызове нового вью, а при возвращении элементы пропадают, поэтому опять их рисую на основе данных ArrayCollection.

alatar
25.01.2012, 19:37
а при возвращении элементы пропадают
При возвращении куда? И каким способом?

Astraport
25.01.2012, 23:41
А разве так много вариантов?
Туда и обратно использую pushView, т. к. приходится таскать туда и обратно ArrayCollection.

alatar
26.01.2012, 12:56
А зачем обратно pushView?

Astraport
26.01.2012, 13:12
А зачем обратно pushView?
Потому что popView() не возвращает объект с параметрами. А мне нужно вернуть изменение свойств блок-схемы.

alatar
26.01.2012, 13:13
Что значит не возвращает? poppedViewReturnedObject (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/spark/components/ViewNavigator.html#poppedViewReturnedObject)

Astraport
26.01.2012, 13:20
Хмм... спасибо. Смотрел на него раньше и не проверил.