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.

Data Binding in Flex

3,573 views

Published on

Preso about data binding in Flex on RAFPUG meeting (April, 12, 2008, Saint Petersburg, Russia) by Julia Nikolaeva aka Junique

Published in: Business, Technology
  • Be the first to comment

Data Binding in Flex

  1. 1. Data Binding . Связывание данных во Flex Юлия Николаева http://riapriority.com/ [email_address]
  2. 2. Вопросы для начала <ul><li>Кто разрабатывает на Flex ? </li></ul><ul><li>Кто использовал data binding хотя бы раз? </li></ul><ul><li>Кто использовал data binding во Flash ? </li></ul><ul><li>Кто знает, что такое data binding ? </li></ul><ul><li>Flash CS 3 уже не поддерживает связывание данных </li></ul>
  3. 3. Что такое связывание данных ? data binding <ul><li>Связывание данных позволяет производить синхронизацию данных. </li></ul><ul><li>Обновляются данные  автоматически обновляется их отображение. </li></ul>
  4. 4. Составляющие связывания данных: <ul><li>source property или свойство источника данных </li></ul><ul><li>destination property или свойство получателя (адресата) данных </li></ul><ul><li>triggering event или запускающее событие </li></ul>Source property Triggering event Destination property
  5. 5. Механизм связывания данных Destination property Source property
  6. 6. Механизм связывания данных : изменение source property Destination property Source property изменение
  7. 7. Механизм связывания данных : source property посылает событие Destination property Source property изменение событие изменения Triggering event
  8. 8. Механизм связывания данных : копирование данных Destination property Source property изменение событие изменения копирование значения source property Triggering event
  9. 9. Роль компилятора <ul><li>добавляет в класс данных функционал рассылки событий </li></ul><ul><li>dispatch -ит событие при изменении свойства </li></ul><ul><li>подписывается на событие изменения данных </li></ul><ul><li>проводит синхронизацию при изменении данных </li></ul>
  10. 10. Способы связывания данных <ul><li>В mxml </li></ul><ul><ul><li>использование фигурных скобок ({}) </li></ul></ul><ul><ul><li>использование тэга < mx : Binding > </li></ul></ul><ul><li>В ActionScript </li></ul><ul><ul><li>использование методов BindingUtils </li></ul></ul>
  11. 11. Примеры <ul><li><mx:TextInput id=&quot; myTI &quot; text=&quot; Enter text here &quot; /> </li></ul><ul><li><mx:Text id=&quot; myText &quot; text=&quot; { myTI.text } &quot; /> </li></ul><ul><li><mx:List id=&quot; list1 &quot; ></mx:List> </li></ul><ul><li><mx:List selectedIndex=&quot; { list1.selectedIndex } &quot; </li></ul><ul><li>verticalScrollPosition=&quot; { list1.verticalScrollPosition } &quot; > </li></ul><ul><li></mx:List> </li></ul>
  12. 12. Примеры <ul><li>Использование сложных выражений: </li></ul><ul><li>ActionScript </li></ul><ul><li>E 4 X </li></ul><mx:TextArea id=&quot; output &quot; text=&quot; { dataObj.format(dataObj.prop) } &quot; /> <mx:List dataProvider= &quot; { x ml data.person.(age==1 7 ||age>= 21 )..first } &quot; />
  13. 13. Когда срабатывает data binding ? <ul><li>source посылает событие изменения </li></ul><ul><li>когда приложение стартует и source посылает событие initialize </li></ul><ul><li>Поэтому часто используют событие preinitialize для определения binding -а. </li></ul>
  14. 14. Использование BindingUtils <ul><li>bindProperty </li></ul><ul><li>bindSetter </li></ul><ul><ul><li>Нельзя использовать ActionScript и E4X </li></ul></ul><ul><ul><li>source property должно быть public </li></ul></ul><ul><ul><li>валидность проверяется только на этапе выполнения </li></ul></ul>
  15. 15. Что может стать источником связывания? <ul><li>Правда ли, что тэг [ Bindable ] необходим? </li></ul><ul><li>источник обязательно должен быть подклассом EventDispatcher ? </li></ul>
  16. 16. Что может стать источником связывания? <ul><li>тэг [ Bindable ], [Bindable(event=&quot;eventname&quot;)] </li></ul><ul><li>Read - only get методы и константы без тэга [Bindable] </li></ul><ul><li>[Bindable] может быть весь класс </li></ul><ul><li>Array не предоставляет встроенных возможностей для связывания </li></ul>
  17. 17. Предрассудки по поводу связывания <ul><li>Лучше использовать свое событие для связывания </li></ul><ul><li>Источник связывания должен поддерживать функционал рассылки событий </li></ul><ul><li>Связывание может привести к зацикливанию </li></ul><ul><li>Связывание коллекций работает непредсказуемо </li></ul><ul><li>Связывание нереально дебажить </li></ul>
  18. 18. Какой способ связывания лучше? + + Обнаружение ошибок на этапе компиляции + + Быстрая разработка + + Удобно находить в коде + Доступ к ChangeWatcher + + Можно сосредоточить все связи в одном месте BindingUtils {} фигурные скобки <mx:Binding>
  19. 19. Опасности связывания данных <ul><li>часто код становится менее читаемым и менее стабильным </li></ul><ul><li>трудно отслеживать сложные внутренние связи </li></ul><ul><li>Возможно нарушение инкапсуляции </li></ul><ul><li>Существует опасности утечки памяти: </li></ul><ul><ul><li>https :// bugs.adobe.com / jira / browse /SDK-14891 </li></ul></ul><ul><ul><li>https :// bugs.adobe.com / jira / browse /SDK-9679 </li></ul></ul>
  20. 20. Q&A <ul><li>Юлия Николаева </li></ul><ul><li>http:// riapriority.com / </li></ul><ul><li>[email_address] </li></ul>

×