Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Using Metatags in Flex Developing

4,102 views

Published on

Published in: Technology
  • Be the first to comment

Using Metatags in Flex Developing

  1. 1. Використання метатеґів у розробці RIA- застосунків за допомогою Flex Роман {nouba} Шупер, The Midnight Coders http:// noubase.com спеціально дла 8- ої зустрічі UAFPUG в Миколаєві (20.12.2008) Рівень слухачів: середній - експерт Галузь: Adobe Flex
  2. 2. Спробуємо дати собі відповіді на наступні запитання: <ul><li>Що таке метатеґи? </li></ul><ul><li>Для чого вони? </li></ul><ul><li>Як їх застосовувати? </li></ul><ul><li>Які види метатеґів бувають? </li></ul><ul><li>Для чого кожен з них служить? </li></ul><ul><li>Коли і як варто їх застосовувати? </li></ul><ul><li>Про що я забув сказати або не знав? </li></ul>
  3. 3. 1. Що таке метатеґи? <ul><li>Метатеґ – спеціальна конструкція, чітко визначеного формату, яка дає змогу додати певні дані до загального коду програми чи структурувати їх, а також вносити зміни в поведінку компілятора чи доповнювати її потрібними нам директивами. </li></ul>Узагальнене визначення:
  4. 4. <ul><li>[Event(name=&quot;myClickEvent&quot;, type=&quot;flash.events.Event&quot;)] </li></ul>1. Що таке метатеґи? Структура: <ul><li>[ … ] – Тіло метатеґа </li></ul><ul><li>Event – Тип метатеґа </li></ul><ul><li>(…) – Перелік всіх полів метатеґа </li></ul><ul><li>type – Поле метатеґа </li></ul><ul><li>&quot;myClickEvent&quot; – Значення поля метатега </li></ul>
  5. 5. 2 . Для чого вони? Для зручності [Event], [Style], [ArrayElementType], [Effect] … Для спеціальних можливостей [Bindable], [RemoteClass], [Embed], [IconFile] … Для структуризації [Exclude], [ExcludeClass], [Deprecated] …
  6. 6. 3 . Як їх застосовувати? В ActionScript 3 :
  7. 7. 3 . Як їх застосовувати? В MXML : Всередині теґа <mx:Metadata>
  8. 8. <ul><li>[ ArrayElementType ] </li></ul><ul><li>[Bindable] </li></ul><ul><li>[ DefaultProperty ] </li></ul><ul><li>[ Deprecated ] </li></ul><ul><li>[Effect] </li></ul><ul><li>[Embed] </li></ul><ul><li>[ Event ] </li></ul><ul><li>[ Exclude ] </li></ul>09. [ ExcludeClass ] 10. [IconFile] 11. [ Inspectable ] 12. [InstanceType] 13. [NonCommittingChangeEvent] 14. [ RemoteClass ] 15. [ Style ] 16. [ Transient ] 4 . Які види метатеґів бувають? Список і ті, які ми розглянемо далі: Документовані
  9. 9. 4 . Які види метатеґів бувають? Список і ті, які ми розглянемо далі: 17. [ Mixin ] 18. [ MaxChildren ] 19. [ PercentProxy ] 20. [ SWF ] 21 . [AccessibilityClass] 22. [ChangeEvent] 23. [ CollapseWhiteSpace ] 24. [ Frame ] 25. … НЕ документовані
  10. 10. [ArrayElementType] <ul><li>Працює тільки в MXML </li></ul>Вказує на допустимий тип елементів масива Мінуси : Плюси: <ul><li>Структурує типи </li></ul><ul><li>Позбавляє від малопомітних і каверзних помилок з типами </li></ul>Розвінчуємо міфи : <ul><li>Не є аналогом типізованого масива чи Vector’a в А ctionScript 3 FP10. </li></ul><ul><li>Не додає жодного прискорення в роботі </li></ul>
  11. 11. [ArrayElementType] ActionSctipt3 Class (Fragment) Вказувати повністю з пакетом, за винятком примітивів!
  12. 12. [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
  13. 13. [DefaultProperty] Визначає властивість, по замовчуванню, для класа package mx.collections { [ DefaultProperty ( &quot;source&quot; )] public class ArrayCollection …. public function set source(s:Array): void { list = new ArrayList(s); }
  14. 14. [DefaultProperty]
  15. 15. [DefaultProperty]
  16. 16. [Inspectable]
  17. 17. [Inspectable] Як це виглядає в коді Увага! Не використовуйте одинарні лапки в описі полів метатеґа! По не зрозумілим причинам метатеґ перестає працювати
  18. 18. [Inspectable] Детальніше про поля метатеґа category Визначає до якої групи належатиме ця властивість в Property Inspector’i Flex Builder’a . Дефолна категорія – “ Other ” .
  19. 19. [Inspectable] Детальніше про поля метатеґа enumeration Це перелік усіх можливих валідних значень для цієї властивості . Сортується завжди за алфавітом. Наприклад: enumeration= “ UAFPUG, BAFPUG, RAFPUG ” перетвориться в наступний список
  20. 20. [Inspectable] Детальніше про поля метатеґа <ul><li>environment </li></ul><ul><li>defaultValue </li></ul><ul><li>format </li></ul><ul><li>listOffset </li></ul><ul><li>name </li></ul><ul><li>type </li></ul><ul><li>variable </li></ul><ul><li>verbose </li></ul>Ще 8 полів у метатеґа Inspectable , які, нажаль, не мають жодного змісту для Flex- розробника. Усі всі вони використовуються для Flash -компонент, але це вже тема для іншої доповіді  .
  21. 21. <ul><li>“ Кривий” і не зручний парсер значення поля name. </li></ul><ul><li>Відсутність перевірки правильності вказаного класа в полі type в момент компіляції (в Flex Builder’i , а в IntelliJ IDEA 8 - працює) </li></ul>[Event] Служить для декларації подій які можуть виникнути в компоненті Мінуси : Плюси: <ul><li>Пришвидшує підписку на події. </li></ul><ul><li>Структурує інформацію про всі можливі події в класі </li></ul>
  22. 22. [Event] В дії ( MXML ):
  23. 23. [Event] В дії ( ActionScript 3 ):
  24. 24. В коді: [Event] Прописуємо метатеґ в нашому класі. В полі type вказує клас повністю з пакетом Створюємо наш власний клас події і добавляємо константу: Зрозуміло, що значення константи TEST_EVENT і поля name повинні співпадати
  25. 25. <ul><li>Між маленькою і великою буквою, або двома великими буквами буде вставлено знак “_” </li></ul><ul><li>Усі літери між знаками “_” буде піднято в верхні регістр </li></ul>[Event] 2 правила парсера: “ testEvent ” -> TEST_EVENT “ TestEvent ” -> _TEST_EVENT “ TEstEvent ” -> _T_EST_EVENT
  26. 26. [Event] Увага! Це погана практика. Якщо, дуже не хочеться створювати окремий клас події.
  27. 27. [Style] Декларує властивість стиля, а також поведінку цієї властивості та її ознаки. Приклади з Flex framework’a : Усі поля метатеґа <ul><li>name </li></ul><ul><li>type </li></ul><ul><li>arrayType </li></ul>4. format 5. enumeration 6. inherit 7. states
  28. 28. [Style] name Визначає як буде відображатись дана властивість в списку
  29. 29. [Style] enumeration Перелічує усі валідні значення для даної властивості
  30. 30. inherit [Style] Вказує на те чи будуть усі потомки компонента наслідувати цю властивість від нього чи ні
  31. 31. inherit [Style] Червоний <mx:Canvas> не унаслідував суцільну зелену рамку від свого батьківського контейнера
  32. 32. inherit [Style] Як бачимо <mx:Label> унаслідував червоний колір тексту від батьківської <mx:Panel>
  33. 33. type [Style] Визначає який тип готова прийняти ця властивість Абсолютно очікувано, отримуємо помилку
  34. 34. [Style] arrayType Нажаль, на даному етапі розвитку Flex Builder ніяк не реагує на порушення типу даних, але все-таки рекомендую використовувати це поле. Можливо колись вони це поправлять.
  35. 35. format [Style] Має зміст лише для компонентів розроблених для Flash. Знову ж таки це уже тема для іншої доповіді. states Вказує на те, що при розробці класу, який буде використаний для скінування ви можете використовувати стейти з відповідними іменами.
  36. 36. [PercentProxy] В дії на прикладі mx.core.UIComponent: Передає параметр в іншу сеттер-функцію, попередньо вирізавши знак процентів
  37. 37. <ul><li>Працює виключно всередині MXML теґів </li></ul>[ CollapseWhiteSpace ] Мінуси : Плюси: <ul><li>Деколи робить за нас нашу роботу ;) </li></ul>
  38. 38. [ CollapseWhiteSpace ]
  39. 39. [ CollapseWhiteSpace ]
  40. 40. [ Mixin ] Викликає статичний метод init () ще до конструктора.
  41. 41. [ Mixin ] Хто вгадає який буде output?
  42. 42. [ MaxChildren ] Жодної корисної дії від цього метатеґа не виявлено хоч його і було виявлено в 3 класах Flex Framework’a, a саме: <ul><li>mx.controls.ButtonBar </li></ul><ul><li>mx.controls.LinkBar </li></ul><ul><li>mx.controls.TabBar </li></ul>Якщо хтось все-таки знайде користь в цьому чудному метатезі – негайно сповістіть мене 
  43. 43. [ RemoteClass ] Слугує для зв’язування пари класів які повинні мапитись між собою при використанні ORB технологій. ActionScript 3 Class Alias вказується з повним ім’ям включно з пакетом
  44. 44. [ RemoteClass ] Java Class При серіалізації та десереалізації усі поля і методи будуть правильно розпізнані рефлектором
  45. 45. [ Transient ] Слугує для того щоб управляти списком полів та методів які підпадуть під серіалізацію в AMF пакет на стороні Flash- плеєра Поле sum може надалі використовуватись на стороні клієнта і воно ніколи не буде серіалізовано і передано на сервер.
  46. 46. [ ExcludeClass ] Ховає клас від intellisense ’a Flex Builder ’а . Тим не менше, Ви можете спокійного імпортувати й використовувати його. Використовується розробниками Flex framework’a , швидше за все, для внутрішніх цілей, або для тих класів які ще не до кінця відтестовані і не випущені .
  47. 47. [ Exclude ] Дає змогу приховати частину API , яку клас унаслідував від свого суперкласа VBox ховає властивість direction , яку він унаслідував від Box, адже вона уже немає жодного логічного значення
  48. 48. [ Exclude ] [ Exclude (name=&quot; direction &quot;, kind=&quot; property &quot;)] [ Exclude (name=&quot; setFocus &quot;, kind=&quot; method &quot;)] [ Exclude (name=&quot; focusIn &quot;, kind=&quot; event &quot;)] [ Exclude (name=&quot; horizontalGap &quot;, kind=&quot; style &quot;)] [ Exclude (name=&quot; focusInEffect &quot;, kind=&quot; effect &quot;)]  Цим метатеґом також можна приховати дію інших метатеґів, таких як : [Style] , [Event] та [Effect] , як показано нижче
  49. 49. [ Deprecated ] Дуже важливий метатеґ для тих хто розробляє власні бібліотеки і підтримує їх, випускаючи нові версії. Використовуйте цей метатеґ на усі методах і властивостях, які являються застарілими для нової версії бібліотеки і мають новий покращений аналог або просто стали непотрібні
  50. 50. [ Deprecated ] При подальшому використанні застарілого метода розробник буде попереджений як значком Так і повідомленням яке ви йому там напишете
  51. 51. [ Deprecated ] Якщо розробник й надалі ігноруватиме наші попередження, то Flex Builder буде постійно нагадувати йому в панельці Problems про використання забороненого метода Уже під час виконання жодних помилок не виникає
  52. 52. [ SWF ] Цей метатеґ не несе жодної користі Flex -розробникам, але часто використовується в чистих ActionScript 3 проектах. За його допомогою ми сконфігурувати деякі параметри кінцевого .swf документа width – ширину нашого застосунка height – висоту нашого застосунка frameRate – частоту кадрів backgroundColor – та колір тла Що ще треба для щастя?
  53. 53. 6 . Коли і як варто їх застосовувати? Метатеґи потрібно використовувати побільше й почастіше
  54. 54. Усім дякую за увагу. Запитання?

×