2013-02-16 3 views
1

У меня есть два экземпляра вида V1a и V1b. Поскольку они являются экземплярами одного типа, они используют один и тот же экземпляр модели представления (PM1), поскольку он вводится в каждый экземпляр как одноэлементный. Каждый вид показывает другое состояние (S1a для V1a и s1b для V1b), но переключение между этими двумя точками зрения (например, когда они находятся в TabNavigator) даст странные результаты:Модель презентации Flex: должно быть указано в представлении?

  1. пользователь смотрит на V1a и видит состояние в S1a;
  2. Пользователь смотрит на V1b и видит состояние для S1b;
  3. Пользователь снова смотрит на V1a, но на этот раз видит состояние для S1b.

Это связано с тем, что S1b перезаписывает состояние в одножильном элементе PM1, так что, когда V1a снова открывается, на дисплее отображается состояние из V1b. У меня есть три решения:

  1. Не вводите ни в коем случае одиночки! но это, по-видимому, самый распространенный способ сделать это;
  2. Когда пользователь переключает представление, он повторно вводит свои данные в PM1. Это может усложниться в иерархических представлениях, где верхний уровень имеет состояние и ему необходимо ввести его на нижний уровень. Необходимо больше внимания уделять привязкам;
  3. Держите состояние в представлении и передавайте его в ПМ, когда представление хочет действовать.

Решение 3 кажется самым простым. Однако все, что я прочитал о модели презентации, как правило, предполагает, что состояние хранится в модели презентации. Может ли кто-нибудь сказать мне, где я ошибаюсь? Насколько я могу судить, гораздо проще и безопаснее удерживать состояние в представлении, чем в модели презентации.

+0

Я не использую презентационную модель самостоятельно, но разве вы не должны использовать разные экземпляры модели в каждом представлении? – 2013-02-16 01:30:40

+0

Да, вы правы. Я был смущен, поскольку используемая мной структура (Tide) не помогла создать новый экземпляр, и многое из того, что написано в Интернете, противоречиво. – Doahh

ответ

0

Решение 1 является хорошим - настройте ваши классы PM, чтобы они не были одиночными. К сожалению, насколько я читал, система Tide не поддерживает это. Другие рамки DI будут, например, Parsley (который больше не поддерживается) поддерживает DynamicObject, который каждый раз вводит новый экземпляр. RobotLegs (который поддерживается) имеет сопоставление инжекторов mapClass, которое даст вам новый экземпляр для каждой инъекции.

Решение 2 звучит грязно.

Решение 3 звучит нормально, если система Tide не даст вам динамических объектов.

Смежные вопросы