54
Використання метатеґів у розробці RIA-застосунків за допомогою Flex Роман {nouba} Шупер, The Midnight Coders http://noubase.com спеціально дла 8-ої зустрічі UAFPUG в Миколаєві (20.12.2008) Рівень слухачів: середній - експерт Галузь: Adobe Flex

Using Metatags in Flex Developing

Embed Size (px)

Citation preview

Page 1: Using Metatags in Flex Developing

Використання метатеґів у розробці RIA-застосунків за

допомогою Flex

Роман {nouba} Шупер, The Midnight Codershttp://noubase.com

спеціально дла 8-ої зустрічі UAFPUG в Миколаєві (20.12.2008)

Рівень слухачів: середній - експерт

Галузь: Adobe Flex

Page 2: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

2

Спробуємо дати собі відповіді на наступні запитання:

1. Що таке метатеґи?2. Для чого вони?3. Як їх застосовувати?4. Які види метатеґів бувають?5. Для чого кожен з них служить?6. Коли і як варто їх застосовувати?7. Про що я забув сказати або не знав?

Page 3: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

3

1. Що таке метатеґи?

Метатеґ – спеціальна конструкція, чітко визначеного формату, яка дає змогу додати певні дані до загального коду програми чи структурувати їх, а також вносити зміни в поведінку компілятора чи доповнювати її потрібними нам директивами.

Узагальнене визначення:

Page 4: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

4

[Event(name="myClickEvent", type="flash.events.Event")]

1. Що таке метатеґи?

Структура:

• […] – Тіло метатеґа• Event – Тип метатеґа• (…) – Перелік всіх полів метатеґа• type – Поле метатеґа• "myClickEvent" – Значення поля метатега

Page 5: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

5

2. Для чого вони?

Для зручності[Event], [Style], [ArrayElementType], [Effect] …

Для спеціальних можливостей[Bindable], [RemoteClass], [Embed], [IconFile] …

Для структуризації[Exclude], [ExcludeClass], [Deprecated] …

Page 6: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

6

3. Як їх застосовувати?

В ActionScript 3:

Page 7: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

7

3. Як їх застосовувати?

В MXML:

Всередині теґа <mx:Metadata>

Page 8: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

8

Документовані

09. [ExcludeClass]

10. [IconFile]

11. [Inspectable]

12. [InstanceType]

13. [NonCommittingChangeEvent]

14. [RemoteClass]

15. [Style]

16. [Transient]

4. Які види метатеґів бувають?

Список і ті, які ми розглянемо далі:

1. [ArrayElementType]

2. [Bindable]

3. [DefaultProperty]

4. [Deprecated]

5. [Effect]

6. [Embed]

7. [Event]

8. [Exclude]

Page 9: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

9

4. Які види метатеґів бувають?

Список і ті, які ми розглянемо далі:

17. [Mixin]

18. [MaxChildren]

19. [PercentProxy]

20. [SWF]

21. [AccessibilityClass]

22. [ChangeEvent]

23. [CollapseWhiteSpace]

24. [Frame]

25. …

НЕдокументовані

Page 10: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

10

[ArrayElementType]

1. Працює тільки в MXML

Вказує на допустимий тип елементів масива

Мінуси:

Плюси:

1. Структурує типи

2. Позбавляє від малопомітних і каверзних помилок з типами

Розвінчуємо міфи:

1. Не є аналогом типізованого масива чи Vector’a в АctionScript 3 FP10.

2. Не додає жодного прискорення в роботі

Page 11: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

11

[ArrayElementType]ActionSctipt3 Class (Fragment)

Вказувати повністю з пакетом, за винятком примітивів!

Page 12: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

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

Page 13: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

13

[DefaultProperty]Визначає властивість, по замовчуванню, для класа

package mx.collections{

[DefaultProperty("source")]

public class ArrayCollection ….

public function set source(s:Array):void{ list = new ArrayList(s);}

Page 14: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

14

[DefaultProperty]

Page 15: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

15

[DefaultProperty]

Page 16: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

16

[Inspectable]

Page 17: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

17

[Inspectable]

Як це виглядає в коді

Увага! Не використовуйте одинарні лапки в описі полів метатеґа! По не зрозумілим причинам метатеґ

перестає працювати

Page 18: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

18

[Inspectable]Детальніше про поля метатеґа

category

Визначає до якої групи належатиме ця властивість в Property Inspector’i Flex Builder’a.Дефолна категорія – “Other”.

Page 19: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

19

[Inspectable]Детальніше про поля метатеґа

enumeration

Це перелік усіх можливих валідних значень для цієї властивості. Сортується завжди за алфавітом.Наприклад:enumeration=“UAFPUG, BAFPUG, RAFPUG” перетвориться в наступний список

Page 20: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

20

[Inspectable]Детальніше про поля метатеґа

1. environment2. defaultValue3. format4. listOffset5. name6. type7. variable8. verbose

Ще 8 полів у метатеґа Inspectable,які, нажаль, не мають жодного змісту для Flex-розробника. Усі всі вони використовуються для Flash-компонент, але це вже тема для іншої доповіді .

Page 21: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

21

[Event]Служить для декларації подій які можуть виникнути в компоненті

1. “Кривий” і не зручний парсер значення поля name.

2. Відсутність перевірки правильності вказаного класа в полі type в момент компіляції (в Flex Builder’i, а в IntelliJ IDEA 8 - працює)

Мінуси:

Плюси:

1. Пришвидшує підписку на події.

2. Структурує інформацію про всі можливі події в класі

Page 22: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

22

[Event]

В дії (MXML):

Page 23: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

23

[Event]

В дії (ActionScript 3):

Page 24: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

24

В коді:

[Event]

Прописуємо метатеґ в нашому класі. В полі type вказує клас повністю з пакетом

Створюємо наш власний клас події і добавляємо константу:

Зрозуміло, що значення константи TEST_EVENT і поля name повинні співпадати

Page 25: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

25

[Event]2 правила парсера:

1. Між маленькою і великою буквою, або двома великими буквами буде вставлено знак “_”

2. Усі літери між знаками “_” буде піднято в верхні регістр

“testEvent” -> TEST_EVENT

“TestEvent” -> _TEST_EVENT

“TEstEvent” -> _T_EST_EVENT

Page 26: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

26

[Event]Увага! Це погана практика. Якщо, дуже не хочеться створювати

окремий клас події.

Page 27: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

27

[Style]Декларує властивість стиля, а також поведінку цієї властивості та її ознаки.

Приклади з Flex framework’a:

1.name2. type3.arrayType

4. format5. enumeration6. inherit

7. states

Усі поля метатеґа

Page 28: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

28

[Style]

name

Визначає як буде відображатись дана властивість в списку

Page 29: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

29

[Style]

enumeration

Перелічує усі валідні значення для даної властивості

Page 30: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

30

inherit

[Style]

Вказує на те чи будуть усі потомки компонента наслідувати цю властивість від нього чи ні

Page 31: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

31

inherit

[Style]

Червоний <mx:Canvas> не унаслідував суцільну зелену рамку від свого батьківського контейнера

Page 32: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

32

inherit

[Style]

Як бачимо <mx:Label> унаслідував червоний колір тексту від батьківської <mx:Panel>

Page 33: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

33

type

[Style]

Визначає який тип готова прийняти ця властивість

Абсолютно очікувано, отримуємо помилку

Page 34: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

34

[Style]

arrayType

Нажаль, на даному етапі розвитку Flex Builder ніяк не реагує на порушення типу даних, але все-таки рекомендую використовувати це поле. Можливо колись вони це поправлять.

Page 35: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

35

format

[Style]

Має зміст лише для компонентів розроблених для Flash. Знову ж таки це уже тема для іншої доповіді.

states

Вказує на те, що при розробці класу, який буде використаний для скінування ви можете

використовувати стейти з відповідними іменами.

Page 36: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

36

[PercentProxy]В дії на прикладі mx.core.UIComponent:

Передає параметр в іншу сеттер-функцію, попередньо вирізавши знак процентів

Page 37: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

37

[CollapseWhiteSpace]

1. Працює виключно всередині MXML теґів

Мінуси:

Плюси:

1. Деколи робить за нас нашу роботу ;)

Page 38: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

38

[CollapseWhiteSpace]

Page 39: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

39

[CollapseWhiteSpace]

Page 40: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

40

[Mixin]Викликає статичний метод init() ще до конструктора.

Page 41: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

41

[Mixin]

Хто вгадає який буде output?

Page 42: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

42

[MaxChildren]

Жодної корисної дії від цього метатеґа не виявлено хоч його і було виявлено в

3 класах Flex Framework’a, a саме:

1. mx.controls.ButtonBar2. mx.controls.LinkBar3. mx.controls.TabBar

Якщо хтось все-таки знайде користь в цьому чудному метатезі – негайно сповістіть мене

Page 43: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

43

[RemoteClass]Слугує для зв’язування пари класів які повинні мапитись між собою при

використанні ORB технологій.

ActionScript 3 Class

Alias вказується з повним ім’ям включно з пакетом

Page 44: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

44

[RemoteClass]Java Class

При серіалізації та десереалізації усі поля і методи будуть правильно розпізнані рефлектором

Page 45: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

45

[Transient]Слугує для того щоб управляти списком полів та методів які

підпадуть під серіалізацію в AMF пакет на стороні Flash-плеєра

Поле sum може надалі використовуватись на стороні клієнта і воно ніколи не буде серіалізовано і передано на сервер.

Page 46: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

46

[ExcludeClass]

Ховає клас від intellisense’a Flex Builder’а. Тим не менше, Ви можете спокійного імпортувати й

використовувати його. Використовується розробниками Flex framework’a, швидше за

все, для внутрішніх цілей, або для тих класів які ще не до кінця відтестовані і не випущені.

Page 47: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

47

[Exclude]Дає змогу приховати частину API, яку клас унаслідував від

свого суперкласа

VBox ховає властивість direction, яку він унаслідував від Box, адже вона уже немає жодного логічного значення

Page 48: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

48

[Exclude]

[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")] 

Цим метатеґом також можна приховати дію інших метатеґів, таких як: [Style], [Event] та [Effect], як показано

нижче

Page 49: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

49

[Deprecated]Дуже важливий метатеґ для тих хто розробляє власні

бібліотеки і підтримує їх, випускаючи нові версії.

Використовуйте цей метатеґ на усі методах і властивостях, які являються застарілими для нової версії бібліотеки і мають

новий покращений аналог або просто стали непотрібні

Page 50: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

50

[Deprecated]

При подальшому використанні застарілого метода розробник буде попереджений як значком

Так і повідомленням яке ви йому там напишете

Page 51: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

51

[Deprecated]

Якщо розробник й надалі ігноруватиме наші попередження, то Flex Builder буде постійно нагадувати йому в панельці

Problems про використання забороненого метода

Уже під час виконання жодних помилок не виникає

Page 52: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

52

[SWF]Цей метатеґ не несе жодної користі Flex-розробникам, але часто використовується в чистих ActionScript 3 проектах. За

його допомогою ми сконфігурувати деякі параметри кінцевого .swf документа

width – ширину нашого застосунка

height – висоту нашого застосунка

frameRate – частоту кадрів

backgroundColor – та колір тла

Що ще треба для щастя?

Page 53: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

53

6. Коли і як варто їх застосовувати?

Метатеґи потрібно використовувати побільше й

почастіше

Page 54: Using Metatags in Flex Developing

Роман {nouba} Шупер, http://noubase.com

54

Усім дякую за увагу.Запитання?