540 likes | 707 Views
Використання метатеґів у розробці RIA- застосунків за допомогою Flex. Галузь: Adobe Flex. Роман {nouba} Шупер, The Midnight Coders http://noubase.com. Рівень слухачів: середній - експерт. спеціально дла 8- ої зустрічі UAFPUG в Миколаєві (20.12.2008).
E N D
Використання метатеґів у розробці RIA-застосунків за допомогою Flex Галузь:Adobe Flex Роман {nouba} Шупер, The Midnight Coders http://noubase.com Рівень слухачів: середній - експерт спеціально дла 8-ої зустрічі UAFPUG в Миколаєві (20.12.2008)
Спробуємо дати собі відповіді на наступні запитання: • Що таке метатеґи? • Для чого вони? • Як їх застосовувати? • Які види метатеґів бувають? • Для чого кожен з них служить? • Коли і як варто їх застосовувати? • Про що я забув сказати або не знав? Роман {nouba} Шупер, http://noubase.com
1. Що таке метатеґи? Узагальнене визначення: Метатеґ – спеціальна конструкція, чітко визначеного формату, яка дає змогу додати певні дані до загального коду програми чи структурувати їх, а також вносити зміни в поведінку компілятора чи доповнювати її потрібними нам директивами. Роман {nouba} Шупер, http://noubase.com
1. Що таке метатеґи? Структура: [Event(name="myClickEvent", type="flash.events.Event")] • […]– Тіло метатеґа • Event – Тип метатеґа • (…)– Перелік всіх полів метатеґа • type – Поле метатеґа • "myClickEvent"– Значення поля метатега Роман {nouba} Шупер, http://noubase.com
2. Для чого вони? Для зручності [Event], [Style], [ArrayElementType], [Effect] … Для спеціальних можливостей [Bindable], [RemoteClass], [Embed], [IconFile] … Для структуризації [Exclude], [ExcludeClass], [Deprecated] … Роман {nouba} Шупер, http://noubase.com
3. Як їх застосовувати? В ActionScript 3: Роман {nouba} Шупер, http://noubase.com
Всередині теґа <mx:Metadata> 3. Як їх застосовувати? В MXML: Роман {nouba} Шупер, http://noubase.com
Документовані 4. Які види метатеґів бувають? Список і ті, які ми розглянемо далі: • [ArrayElementType] • [Bindable] • [DefaultProperty] • [Deprecated] • [Effect] • [Embed] • [Event] • [Exclude] 09. [ExcludeClass] 10. [IconFile] 11. [Inspectable] 12. [InstanceType] 13. [NonCommittingChangeEvent] 14. [RemoteClass] 15. [Style] 16. [Transient] Роман {nouba} Шупер, http://noubase.com
4. Які види метатеґів бувають? Список і ті, які ми розглянемо далі: НЕдокументовані 17. [Mixin] 18. [MaxChildren] 19. [PercentProxy] 20. [SWF] 21.[AccessibilityClass] 22.[ChangeEvent] 23. [CollapseWhiteSpace] 24. [Frame] 25. … Роман {nouba} Шупер, http://noubase.com
[ArrayElementType] Вказує на допустимий тип елементів масива Мінуси: • Працює тільки в MXML Розвінчуємо міфи: • Не є аналогом типізованого масива чи Vector’a в АctionScript 3 FP10. • Не додає жодного прискорення в роботі Плюси: • Структурує типи • Позбавляє від малопомітних і каверзних помилок з типами Роман {nouba} Шупер, http://noubase.com
[ArrayElementType] ActionSctipt3 Class (Fragment) Вказувати повністю з пакетом, за винятком примітивів! Роман {nouba} Шупер, http://noubase.com
[ArrayElementType] MXML Layout (Fragment) In initializer for 'testArray': type Number is not assignable to target type Array or target element type . ArrayElementType/src main.mxml line 8 Роман {nouba} Шупер, http://noubase.com
[DefaultProperty] Визначає властивість, по замовчуванню, для класа package mx.collections { [DefaultProperty("source")]publicclass ArrayCollection …. publicfunctionset source(s:Array):void { list = new ArrayList(s); } Роман {nouba} Шупер, http://noubase.com
[DefaultProperty] Роман {nouba} Шупер, http://noubase.com
[DefaultProperty] Роман {nouba} Шупер, http://noubase.com
[Inspectable] Роман {nouba} Шупер, http://noubase.com
[Inspectable] Як це виглядає в коді Увага! Не використовуйте одинарні лапки в описі полів метатеґа! По не зрозумілим причинам метатеґ перестає працювати Роман {nouba} Шупер, http://noubase.com
[Inspectable] Детальніше про поля метатеґа category Визначає до якої групи належатиме ця властивість в Property Inspector’i Flex Builder’a. Дефолна категорія – “Other”. Роман {nouba} Шупер, http://noubase.com
[Inspectable] Детальніше про поля метатеґа enumeration Це перелік усіх можливих валідних значень для цієї властивості. Сортується завжди за алфавітом. Наприклад: enumeration=“UAFPUG, BAFPUG, RAFPUG”перетвориться в наступний список Роман {nouba} Шупер, http://noubase.com
[Inspectable] Детальніше про поля метатеґа • environment • defaultValue • format • listOffset • name • type • variable • verbose Ще 8 полів у метатеґа Inspectable, які, нажаль, не мають жодного змісту для Flex-розробника. Усі всі вони використовуються для Flash-компонент, але це вже тема для іншої доповіді . Роман {nouba} Шупер, http://noubase.com
[Event] Служить для декларації подій які можуть виникнути в компоненті • “Кривий” і не зручний парсер значення поля name. • Відсутність перевірки правильності вказаного класа в полі typeв момент компіляції (в Flex Builder’i, а в IntelliJ IDEA 8 - працює) Мінуси: Плюси: • Пришвидшує підписку на події. • Структурує інформацію про всі можливі події в класі Роман {nouba} Шупер, http://noubase.com
[Event] В дії (MXML): Роман {nouba} Шупер, http://noubase.com
[Event] В дії (ActionScript 3): Роман {nouba} Шупер, http://noubase.com
[Event] В коді: Прописуємо метатеґ в нашому класі. В полі type вказує клас повністю з пакетом Створюємо наш власний клас події і добавляємо константу: Зрозуміло, що значення константи TEST_EVENT і поля name повинні співпадати Роман {nouba} Шупер, http://noubase.com
[Event] 2 правила парсера: • Між маленькою і великою буквою, або двома великими буквами буде вставлено знак “_” • Усі літери між знаками “_” буде піднято в верхні регістр “testEvent” ->TEST_EVENT “TestEvent” ->_TEST_EVENT “TEstEvent” ->_T_EST_EVENT Роман {nouba} Шупер, http://noubase.com
[Event] Увага! Це погана практика.Якщо, дуже не хочеться створювати окремий клас події. Роман {nouba} Шупер, http://noubase.com
4. format 5. enumeration 6. inherit • name • type • arrayType 7. states [Style] Декларує властивість стиля, а також поведінку цієї властивості та її ознаки. Приклади з Flex framework’a: Усі поля метатеґа Роман {nouba} Шупер, http://noubase.com
[Style] name Визначає як буде відображатись дана властивість в списку Роман {nouba} Шупер, http://noubase.com
[Style] enumeration Перелічує усі валідні значення для даної властивості Роман {nouba} Шупер, http://noubase.com
[Style] inherit Вказує на те чи будуть усі потомки компонента наслідувати цю властивість від нього чи ні Роман {nouba} Шупер, http://noubase.com
[Style] inherit Червоний <mx:Canvas> не унаслідував суцільну зелену рамку від свого батьківського контейнера Роман {nouba} Шупер, http://noubase.com
[Style] inherit Як бачимо <mx:Label> унаслідував червоний колір тексту від батьківської <mx:Panel> Роман {nouba} Шупер, http://noubase.com
[Style] type Абсолютно очікувано, отримуємо помилку Визначає який тип готова прийняти ця властивість Роман {nouba} Шупер, http://noubase.com
[Style] arrayType Нажаль, на даному етапі розвитку Flex Builder ніяк не реагує на порушення типу даних, але все-таки рекомендую використовувати це поле. Можливо колись вони це поправлять. Роман {nouba} Шупер, http://noubase.com
[Style] format Має зміст лише для компонентів розроблених для Flash. Знову ж таки це уже тема для іншої доповіді. states Вказує на те, що при розробці класу, який буде використаний для скінування ви можете використовувати стейтиз відповідними іменами. Роман {nouba} Шупер, http://noubase.com
[PercentProxy] В дії на прикладі mx.core.UIComponent: Передає параметр в іншу сеттер-функцію, попередньо вирізавши знак процентів Роман {nouba} Шупер, http://noubase.com
[CollapseWhiteSpace] Мінуси: • Працює виключно всередині MXML теґів Плюси: • Деколи робить за нас нашу роботу ;) Роман {nouba} Шупер, http://noubase.com
[CollapseWhiteSpace] Роман {nouba} Шупер, http://noubase.com
[CollapseWhiteSpace] Роман {nouba} Шупер, http://noubase.com
[Mixin] Викликає статичний метод init()ще до конструктора. Роман {nouba} Шупер, http://noubase.com
[Mixin] Хто вгадає який буде output? Роман {nouba} Шупер, http://noubase.com
[MaxChildren] Жодної корисної дії від цього метатеґа не виявлено хоч його і було виявлено в 3 класах Flex Framework’a, a саме: • mx.controls.ButtonBar • mx.controls.LinkBar • mx.controls.TabBar Якщо хтось все-таки знайде користь в цьому чудному метатезі – негайно сповістіть мене Роман {nouba} Шупер, http://noubase.com
[RemoteClass] Слугує для зв’язування пари класів які повинні мапитись між собоюпри використанні ORB технологій. ActionScript 3 Class Alias вказується з повним ім’ям включно з пакетом Роман {nouba} Шупер, http://noubase.com
[RemoteClass] Java Class При серіалізації та десереалізації усі поля і методи будуть правильно розпізнані рефлектором Роман {nouba} Шупер, http://noubase.com
[Transient] Слугує для того щоб управляти списком полів та методів які підпадуть під серіалізацію в AMF пакет на стороні Flash-плеєра Поле sum може надалі використовуватись на стороні клієнта і воно ніколи не буде серіалізовано і передано на сервер. Роман {nouba} Шупер, http://noubase.com
[ExcludeClass] Ховає клас від intellisense’aFlex Builder’а. Тим не менше, Ви можете спокійного імпортувати й використовувати його. Використовується розробниками Flex framework’a, швидше за все, для внутрішніх цілей, або для тих класів які ще не до кінця відтестовані і не випущені. Роман {nouba} Шупер, http://noubase.com
[Exclude] Дає змогу приховати частину API,яку клас унаслідував від свого суперкласа VBox ховає властивість direction, яку він унаслідував від Box, адже вона уже немає жодного логічного значення Роман {nouba} Шупер, http://noubase.com
[Exclude] Цим метатеґом також можна приховати дію інших метатеґів, таких як:[Style], [Event]та [Effect], як показано нижче [Exclude(name="direction", kind="property")] [Exclude(name="setFocus", kind="method")] [Exclude(name="focusIn", kind="event")] [Exclude(name="horizontalGap", kind="style")] [Exclude(name="focusInEffect", kind="effect")] Роман {nouba} Шупер, http://noubase.com
[Deprecated] Дуже важливий метатеґ для тих хто розробляє власні бібліотеки і підтримує їх, випускаючи нові версії. Використовуйте цей метатеґ на усі методах і властивостях, які являються застарілими для нової версії бібліотеки і мають новий покращений аналог або просто стали непотрібні Роман {nouba} Шупер, http://noubase.com
[Deprecated] При подальшому використанні застарілого метода розробник буде попереджений як значком Так і повідомленням яке ви йому там напишете Роман {nouba} Шупер, http://noubase.com