Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MVC:Подмена вьюшек (http://www.flasher.ru/forum/showthread.php?t=157808)

3p.station 11.06.2011 01:48

MVC:Подмена вьюшек
 
Всем привет. Подскажите, как организовывается разный вид интерфейса программы.
имеем набор видов:обычный, полный экран, вид удобный для горизонтального просмотра, вертикального, мини-вид...
соответсвенно вид меняется (координаты гуишек, размеры и тп). Если я верно понимаю, то проще исопльзовать под каждый вид отдельный набор вьюшек. Вопрос - как (какой класс) должен организовать реалтайм удаление и подстановку новых инстансов. Или может посоветуете чего сопутствуещего.

Спасибо

ЗЫ юзаю роботлегс

Psycho Tiger 11.06.2011 01:58

Я пишу посредник - медиатор между вьюшкой и контроллером. В любой момент вьюшка может поменяться, но никто ничего не заметит, т.к. все работают с медиатором.

fish_r 11.06.2011 07:00

Не знаю, как это может быть решено в роботлегс. Но, я бы организовал вьюшку в виде контейнера и по команде модели заменял бы поставляемые ею же (моделью) "морды"...

i.o. 11.06.2011 11:30

Цитата:

и по команде модели заменял бы поставляемые ею же (моделью)
Один из основных смыслов MVC в том, что модель сама по-себе. В ней нет ссылок на Controller и View.

3p.station 11.06.2011 12:00

спасибо за ответы! :drinks:

Цитата:

Сообщение от Psycho Tiger (Сообщение 1002864)
Я пишу посредник - медиатор между вьюшкой и контроллером. В любой момент вьюшка может поменяться, но никто ничего не заметит, т.к. все работают с медиатором.

в роботе кстате тоже медиаторы. да, наверно так и сделаю.
Еще вопрос, в то время как юзер переключает виды, вьюшки уже имеют определенный вид (чекбоксы, стринги, состояния кнопок...), чтобы вновь рожденная вьюшка сразу приняла нужный вид, нужно использовать "хранитель" ?

Crazy 11.06.2011 12:18

Цитата:

Сообщение от 3p.station (Сообщение 1002896)
чтобы вновь рожденная вьюшка сразу приняла нужный вид, нужно использовать "хранитель" ?

Memento pattern

3p.station 11.06.2011 12:21

ага он самый, спасибо!

Dukobpa3 11.06.2011 12:24

Цитата:

чтобы вновь рожденная вьюшка сразу приняла нужный вид, нужно использовать "хранитель" ?
Ключевые моменты могут быть к примеру в модели. Поидее должно быть так чтоб вью могла всё что ей надо для адекватного отрисовывания взять в модели.

А роботлегс да, там как раз архитектура под это заточена. Там пачка вьюшек и медиатор сразу в ядре фреймворка вшиты, остается только юзать согласно мануалов ;)

3p.station 11.06.2011 12:33

Цитата:

Сообщение от Dukobpa3 (Сообщение 1002906)
Поидее должно быть так чтоб вью могла всё что ей надо для адекватного отрисовывания взять в модели.

ну... в некоторых вью, возможно, будут штуки которые могут быть для модели не интересны, а так да, идея верна :)

Dukobpa3 11.06.2011 12:42

Ну пропорции экрана например вьюха может вычислить из размеров стейджа. Кординаты элементов точно так же можно вычислить динамически (я собственно практически всегда так и делаю в методе render()).

А в модель напихать там что-то типа размеров шрифтов, цвета кнопок, состав элементов (на маленьких экранах к примеру может быть что-то спрятано, или какое-то окошко просмотра чего-то сжато в маленькую кнопочку).

3p.station 11.06.2011 12:56

круто! у меня даже есть для этого моделька SetupModel

Crazy 11.06.2011 13:27

Цитата:

Сообщение от Dukobpa3 (Сообщение 1002906)
Ключевые моменты могут быть к примеру в модели. Поидее должно быть так чтоб вью могла всё что ей надо для адекватного отрисовывания взять в модели.

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

Dukobpa3 11.06.2011 13:51

так а нахрена мне положение курсора то хранить где-то???

3p.station 11.06.2011 13:52

вот и разобрались ( :
часть стейта будем брать из модели, а часть из хранителя.
А хранитель четко для одного объекта, или можно сделать один на всех ( =

Добавлено через 1 минуту
Цитата:

Сообщение от Dukobpa3 (Сообщение 1002930)
так а нахрена мне положение курсора то хранить где-то???

если юзер ввел в поле текст, он должен будет появиться в новой вьюхе.

Crazy 11.06.2011 13:56

Цитата:

так а нахрена мне положение курсора то хранить где-то???
Простой пример интерфейса, который меня бесит: держу в руке планшет и ввожу текст. Случайно наклоняю его -- и экран переключается на вьюху в другой ориентации и перекидывает курсор в начало текста. Тот, кто это реализовал, тоже, видимо, думал не о моем удобстве, а "нахрена мне положение курсора то хранить где-то".

Так вот, коллега, Вам, как разработчику может и боком не уперлось сохранять фокус ввода, положение курсора и т.п. параметры. Но меня, как пользователя, это наплевание на меня откровенно раздражает.

Добавлено через 1 минуту
Цитата:

Сообщение от 3p.station (Сообщение 1002931)
если юзер ввел в поле текст, он должен будет появиться в новой вьюхе.

О да, такая клиника -- когда при переключении пропадает часть введенного текста -- все еще встречается. Но, к счастью, естественный отбор быстро сокращает количество таких приложений... :)

Dukobpa3 11.06.2011 14:32

Я не имел в виду такую вот клинику из примеров)))

Просто вот такие вещи на тему "перевернул планшет" - я реализовываю без всяких там подмен вьюх, это просто динамическое перепозиционирование объектов. И тут очевидно что всё как было так и должно остаться.

А если речь идет именно о подмене вьюх как в теме - то тут не вижу смысла заморачиваться с этим. Так как по сути:
а) там где такие тонкости нужны там как правило можно обойтись одной вьюхой, просто что-то куда-то подвинуть при изменениях
б) там где действительно нужно много вьюх - как правило не нужно так дотошно хранить все состояния.

fish_r 11.06.2011 15:33

Цитата:

Сообщение от i.o. (Сообщение 1002895)
Один из основных смыслов MVC в том, что модель сама по-себе. В ней нет ссылок на Controller и View.

то, что я написал никак не противоречит этой концепции.

Однако, это действительно не удобный вариант, если речь идет о "смене вида на ходу". Какое дело модели до того как вьюха выглядит? Вероятно "хранитель" - самое лучшее решение.

3p.station 11.06.2011 15:51

я еще о "стратегиях" думал... типа вьюшке передается объект стратегии расположения и делается например redraw();


Часовой пояс GMT +4, время: 14:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.