Как получить один и тот же идентификатор компонента в другом состоянии (Flex Mobile Project) - PullRequest
3 голосов
/ 15 апреля 2011

Например, в моем мобильном мобильном приложении у меня есть книжная и альбомная ориентация.Оба с одинаковыми компонентами, но они размечаются с использованием разных HGroups и VGroups в каждом состоянии.Если бы я просто помещал обработчики кликов в эти компоненты, это было бы легко, потому что я мог просто определить для них один и тот же прослушиватель кликов, даже если у них были разные идентификаторы.Но так как я ссылаюсь на все эти компоненты в нескольких ситуациях много раз по всему приложению, как я могу позволить им иметь один и тот же идентификатор и реагировать, только если они находятся в текущем представлении?

прямо сейчас это говорит мне"identifier 'example_id' used more than once."

edit: также просто хочу сказать, что я в курсе, что когда они не в группе, вы можете просто сделать что-то вроде x.portrait = "25" y.portrait = "" 25 "но когда они у меня в группах H и V, это мешает мне сделать это.

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Как упоминал Томаш и в документации говорится,

... все свойства идентификатора должны быть уникальными в документе.

Ваше редактированиеуказывает на проблему с попыткой использовать явные координаты в макетах, которые игнорируют их (VerticalLayout & HorizontalLayout).Из-за этого я не уверен, что вы действительно не можете использовать селекторы состояний, такие как упомянутый Томаш, или нет.Возможно, вам нужно объяснить чуть более подробно, почему использование селекторов состояния не подходит для вас.

Альтернативой использованию свойства 'id' для получения ссылок на компоненты, объявленные в MXML, является использование 'имя 'собственность.Присвоение имени компоненту позволяет получить его с помощью метода getChildByName () любого объекта DisplayObjectContainer.Этот метод:

Возвращает дочерний экранный объект, который существует с указанным именем.Если указанное имя имеет более одного дочернего экранного объекта, метод возвращает первый объект в дочернем списке.

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

1 голос
/ 15 апреля 2011

Боюсь, вы можете поместить компонент с идентификатором только один раз в контейнер и установить его свойства только в зависимости от состояния.

это будет работать (с учетом состояний "вертикальный" и "горизонтальный"):

<s:Group id="test" width="100%" height="100%" visible.vertical="true" visible.horizontal="false"/>

но это не так:

<s:Group id="test" width="100%" height="100%" includeIn="vertical"/>
<s:Group id="test" width="100%" height="100%" includeIn="horizontal"/>

Так что, вероятно, вам придется ретранслировать ваш пользовательский интерфейс (пусть это будет разметка Flex?) Во время выполнения. Один из обходных путей - разместите компоненты пользовательского интерфейса, такие как прямоугольники и т. Д., Вокруг ваших компонентов и включите и выключите их в зависимости от стиля, заставляя ваши компоненты там, где вы хотите их видеть.

...