Создание темы оформления для кнопки в Flex с помощью состояний документа

Я наткнулся на этот фрагмент кода, и он меня заинтриговал. Я раньше не видел такого снятия шкуры. Хотелось бы узнать, есть ли ему недостатки и альтернативы. Например, интенсивно ли используется процессор, как вызовы addChild?

<s:Button id="loginoutBtn" right="10" top="10" label="Log out" label.loggedout="Log in" skinClass.loggedin="skins.FBLogoutButtonSkin" skinClass.loggedout="skins.FBLoginButtonSkin" click.loggedin="logout()" click.loggedout="login()"/>

Справочная информация: кнопка выше является частью примера входа в систему. Я много работал со скиннингом, но этот процесс почти всегда приводил к созданию нового компонента для нового скина. Кроме того, будет ли ToggleButton хорошим вариантом использования для вышеперечисленного?

Лучше спросить, если бы у вас была кнопка входа и выхода в местоположении x y, как бы вы это сделали?

Я думаю, что в этом случае я бы установил две кнопки для соответствующих скинов и includeIn для каждой, так что

<s:Button id="loginBtn" includeIn="loggedIn" right="10" top="10" skinClass="skins.FBLoginButtonSkin" click="login()"/>

<s:Button id="logoutBtn" includeIn="loggedOut" right="10" top="10" skinClass="skins.FBLogoutButtonSkin" click="logout()" />

person 1.21 gigawatts    schedule 21.03.2012    source источник


Ответы (2)


В этом конкретном случае я бы выбрал ToggleButton с настраиваемой оболочкой.

Почему?

  • Требуется только один пользовательский скин вместо двух
  • Более чистый код в компоненте «хост»: не требуются две кнопки или набор атрибутов, связанных с состоянием; просто «выбранный» должен быть привязан к состоянию.
  • Поскольку вы спросили: вероятно, вариант с меньшей загрузкой процессора (потому что A. есть только одна кнопка, а B. - только одна оболочка). Но, честно говоря, я думаю, что это в любом случае не имеет значения: производительность одной кнопки действительно не имеет значения.

.

<s:ToggleButton id="loginBtn" selected.loggedin="true" selected.loggedout="false"
                skinClass="skins.FBLoginToggleButtonSkin" 
                click="logInOrOut(loginBtn.selected)" />

примечание: две метки будут определены внутри настраиваемого ToggleButtonSkin:

<s:Label text="log in" text.selectedStates="log out" />
person RIAstar    schedule 21.03.2012
comment
Я долгое время думал о скинах как о многоцелевых, но я считаю, что они создаются как единичные вещи. Это тот случай, который вы наблюдаете? - person 1.21 gigawatts; 21.03.2012
comment
@ 1.21gigawatts Некоторые скины могут быть «многоцелевыми»; обычно те, которые вы создаете в теме; например, вы создаете один объект ButtonSkin, который применяется во всем приложении ко всем кнопкам. Остальные могут быть разовыми; так всегда будет с пользовательскими компонентами, которые нельзя использовать повторно; но они также могут применяться к повторно используемым компонентам в определенных ситуациях, подобных этой. Я смотрю на скин как на специфический стиль для этого компонента: это просто средство представить компонент по-другому, но не должно изменять его поведение или значение. - person RIAstar; 21.03.2012

Вы можете сделать две кнопки или одну кнопку и изменить свойства. Чтобы увидеть разницу в производительности, вы можете сохранить сгенерированный код AS3. Подробнее см. По этой ссылке.

http://saravananrk.wordpress.com/2008/05/26/keep-generated-actionscript-in-flex/

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

person keyle    schedule 21.03.2012
comment
Спасибо @keyle - Вы создаете скины раз и навсегда или для каждого проекта? (тот же вопрос задан РИАстар - person 1.21 gigawatts; 21.03.2012
comment
Один скин и 2 свойства css - person keyle; 26.03.2012