Comments 19
Отлично — Первый стоящий топик по Flex =)

Надеюсь у меня тоже найдётся как-нибудь времячко поделиться накопленным))

UFO landed and left these words here
как-раз в последнее время их становится всё больше, собственно, флекс входит в зенит)

замечательная тенденция. тоже буквально несколько месяцев как взялся за него.
может со временем тож на статью наскребу)

автору — Спасибо.
статья найдет применение в моих проектах)
благодарю. Как раз в текущем проекте flex используется. Думаю, что ваша статья пригодится. В избранное!
Огромное спасибо, за доходчивый и интересный матерьял. Если бы большинство статей на хабре были такого содержания, был бы второй Experts-Exchange.
Спасибо за интересный топик. Я в своих проектах не использую так широко байндинг, а в особенности цепочки. Мне проще переопределить сеттеры для изменения состояния компонентов. Теперь пересмотрю реализацию некоторых вещей.
А почему так сложно? Есть же прямой и куда более внятный способ биндования:

>>Условием нашей задачи будет отключение текстового поля при достижении количества объектов содержащихся в >>нашей коллекции 10 штук

<?xml version=«1.0» encoding=«utf-8»?>
<mx:Application
xmlns:mx=«www.adobe.com/2006/mxml»
layout=«horizontal»>
<mx:ArrayCollection id=«data_collection» />
<mx:Button click=«data_collection.addItem('item')» label=«Add item to collection» />
<mx:Label text=«Items in collection: {data_collection.length}» />
<mx:TextInput enabled="{data_collection.length < 10}" />
</mx:Application>

Мы используем прямой биндинг через фигурные скобки в XML для значения поля enabled. Вот и все. Единственное неудобство, нужно использоавть HTML entity вместо простого знака «меньше».

Повторюсь, самый простой и понятный способ биндования — это именно через фигурные скобки в MXML. Биндинги через BindingUtils нужны если вам надо связать значение в динамически созданном объекте с каким-то другим значением в вашем классе. Например привязать всплывающее окно редактирования, к выбранному в списке объекту.
Данный пример был приведен для того, чтобы разъяснить, что такое составной объект в методе bindProperty и не более того. Никто не говорит, что надо делать именно так. Я просто пытался на простых примерах объяснить механизм.

Да, вы правы на счет простого и понятного способа через фигурные скобки в mxml, но бывают ситуации, когда этого недостаточно. Я имею в виду такие задачи, когда идет работа с динамически создаваемыми компонентами.

Например, у меня была задача, когда необходимо было, чтобы дочерние элементы, лежащие на компоненте, имели соотносимые с родительскими координаты и размеры. Т.е. в случае изменения размера родительского компонента необходимо пересчитывать координаты и размеры каждого из дочерних элементов. Плюс ко всему этому дочерние элементы создавались динамически. Эта задача очень легко решилась при помощи связывания, а именно использования метода bindSetter совместно со составным объектом.

Я думаю, что каждый найдет применение какого-то из вышеописанных методов в своей уникальной задаче.
а где собственно tricks? все что вы написали есть в официальной документации и туториалах
«Бэн! Это Данила! Ай нид хэлп...» (с)

Пытаюсь использовать цепочку для простенького примера: есть массив, состоящий из элементов типа Object, и есть Label, который должен отображать конкретный атрибут конкретного элемента этого массива. Пробовал вот так:
BindingUtils.bindProperty(myLabel, «text», this, [«myArray[1]», «myAttr»]);

Не работает.

С точки зрения массива (имеется в виду Array) мы можем использовать только одно свойство, на которое можно повесить binding это length. Он будет срабатывать только тогда, когда у массива изменяется количество элементов.
Для твоего случая лучше использовать bindProperty:

BindingUtils.bindProperty(myLabel, «text», myArray,
{
name: «length»,
getter: function (host: ArrayCollection):String { return host[1].myAttr; }
});

Примерно так. Все зависит от задачи. Если данный подход это все, что тебе нужно тогда отлично, иначе придется обдумывать как избавиться от массива. Обращайся, обдумаем.
Проблема решилась, спасибо за ответ.
Прокатило следующее:
BindingUtils.bindProperty(myLabel, «text», this, [«myArray», «1», «myAttr»]);
т.е. в цепочке участвует и номер элемента.
BindingUtils — dynamic программинг, в enterprise стоит юзать в очень крайнем случае. MXMXL умеет хорошо делать тоже с плюс type check-инг, да и выглядит оно поприятнее.
Only those users with full accounts are able to leave comments. Log in, please.