Flex 4 скинов и переплет - PullRequest
       8

Flex 4 скинов и переплет

3 голосов
/ 07 февраля 2010

Мне нравятся скины во Flex 4 - они предлагают действительно хорошее разделение между логикой и стилем.

Мне было интересно, как люди используют связывание в скинах. Самый простой способ - просто привязать кожу:

label="{ hostComponent.model.buttonLabel }"

Вы также можете использовать двухсторонние привязки:

selectedItem="@{ hostComponent.model.selectedItem }"

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

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

Как другие справляются с этим?

1 Ответ

1 голос
/ 28 июня 2011

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

Вы можете создавать идентификаторы в скине и управлять ими из модели. Например

SKIN: label id="infoLabel"
COMPONENT: [SkinPart] var infoLabel:Label
creationComplete {
  BindingUtils.bindProperty(this, 'infoLabel', model, 'infoLabel');
}

Это решит вашу проблему. Нет повторного обслуживания между скинами одного и того же компонента. Однако использование BindingUtils обходится дорого. Во-первых, не так очевидно, что связано с чем - использование пути {} намного более очевидно. Во-вторых (я полагаю, что это на самом деле только часть первого пункта), вы можете запутать менее способных разработчиков, которым приходится читать ваш код и выяснять, что происходит.

РЕДАКТИРОВАТЬ: Предполагается, что ваш компонент находится в AS3. Если ваш компонент находится в MXML, я думаю, вы можете просто выполнить связывание, как обычно в MXML.

...