Это первая часть моего рассказа про Data Binding во Flex, который живьем можно было послушать на 12-ого апреля 2008 года на питерской встрече Russian Adobe Flash Platform User Group.
Презентацию можно скачать здесь, либо посмотреть в отчете Константинера о встрече RAFPUG в Питере в День Космонавтики.

Презентация рассчитана на мой сопутствующий рассказ, поэтому некоторые слайды можно неправильно воспринять без объяснений. Отчасти поэтому я и пишу небольшой цикл постов по этой теме. Хотя главная причина в том, что тема эта очень интересная, и хочется говорить об этом снова и снова. :)

Data Binding (связывание данных) можно назвать одной из основ разработки на Flex. Поэтому каждый уважающий себя разработчик прямо таки обязан в совершенстве владеть этим интересным и полезны механизмом.

Если вы разрабатываете на Flex, то, скорее всего, регулярно используете data binding. Особенно органично его использование в mxml. Вообще говоря, надо сильно извратиться, чтобы, используя mxml, ни разу не использовать data binding или связывание данных.

Data binding во Flash
Интересно, что на Flash платформе data binding появился еще во Flash, и некоторые разработчики активно его использовали.
Flash 8 для этого предоставлял Bindings tab и классы пакета mx.data.binding.
Кстати, не могу сказать, что связывание данных во Flash, было удобным. Хотя, не могу сказать, что хоть что-то там было удобно. :)

Еще более интересен тот факт, что Flash CS3 уже не предоставляет возможностей связывания данных своим разработчикам. Видимо, это очередной намек Adobe на то, что программистам надо смотреть в сторону Flex.
В документации для Flash CS3 про Data binding classes недвусмысленно говорится о том, что можно использовать старые механизмы связывания, но тогда и компилить можно будет только под ActionScript 2.0.

Что же такое связывание данных или data binding?
Суть связывания в автоматической синхронизации. Слово “автоматическая” особенно приятно звучит, так как это освобождает нас от какой-то рутинной работы. А кто хочет заниматься рутинной работой? :)

Наиболее распространенный случай - это синхронизация model и view.
При нормальном адекватном развитии событий в приложении существуют такие слои, как view, model, controller. View отображает данные модели. В большинстве случаев при изменении данных в модели, необходимо обновлять view. Это можно осуществить вручную путем подписывания на события изменения модели и вызовом методов обновления view. Связывание данных позволяет делать это автоматически.

Вам выбирать, что синхронизировать. Это может быть синхронизация данных, различных элементов GUI и тд и тп.

В качестве примера синхронизации элементов GUI можно привести такой код:

Code:

<mx:List id="list1" dataProvider="{listExample}"></mx:List>
<mx:List id="list2" dataProvider="{listExample}"
selectedIndex="{list1.selectedIndex}"
verticalScrollPosition="{list1.verticalScrollPosition}">
</mx:List>

Всего несколько строк кода позволяют определить сразу три синхронизации:

  • dataProvider обоих списков синхронизируются с коллекцией listExample. Это значит, что при изменении listExample, оба списка сами обновят свой внешний вид.
  • selectedIndex синхронизируется с соответствующим свойством первого списка. Таким образом, когда пользователь выделяет элементы первого списка, соотвествующие элементы автоматически выделяются во втором списке.
  • аналогично синхронизируются значения verticalScrollPosition списков. Если пользователь скролит первый список, то автоматически скролится и второй список.

Трекбек адрес этой записи

URL трекбека (щелкните правой кнопкой мыши и скопируйте ссылку)

3 комментариев, 2 Трекбеков

Трекбек от: Constantiner's blog [Посетитель]
Отчет о встрече RAFPUG в Питере в День Космонавтики
Ну вот наконец я созрел для того, чтобы написать небольшой отчет по прошедшей 12 апреля 2008-го года первой питерской встречи Русскоязычной
2008-05-01 @ 18:44
Хорошее начало!

Стыдно сказать, не знаю - есть ли двухсторонний Data Binding? А то чего-то он у меня все время односторонний получается при использовании фигурных скобок.
2008-05-04 @ 00:20
> Стыдно сказать, не знаю - есть ли двухсторонний Data Binding?

Двусторонний есть. Можно использовать для этого mx:Binding.
2008-05-04 @ 14:44
Трекбек от: Constantiner's blog [Посетитель]
Лучшие посты на Riapriority.com за уходящий год

По уже сложившейся традиции в последние дни уходящего года в первые дни нового года хочу подвести некоторые итоги по части того, что пол
2009-01-01 @ 22:29
Комментарий от: Geba [Посетитель]
Спасибо за хорошую статью! А не подскажите, остальные части будут:roll:?
2009-02-03 @ 16:40

Оставить комментарий


Ваш email адрес. (Не будет показан на сайте.)

Ваш URL будет показан.
:!: :?: :idea: :) :D :p B) ;) :> :roll: :oops: :| :-/ :( :'( |-| :>> :yes: ;D :P :)) 88| :. :no: XX( :lalala: :crazy: >:XX
(Заменить прерывания строк на <br />)
(Имя, email и сайт)
(Разрешить пользователям посылать вам сообщения (ваш email не отображается).)
3 + 2 + 7 - 1?
antispam test

Вы можете использовать OpenID чтобы предоставить ваше имя, email и url.