[Bindable]
/**
* Display output of video device.
*/
public var videoLocal : Video;
Кто-нибудь знает?
[Bindable]
/**
* Display output of video device.
*/
public var videoLocal : Video;
Кто-нибудь знает?
[Bindable] - это один из нескольких метатегов, которые вы можете использовать в коде Flex ActionScript. Его можно применять к свойствам или методам, отмеченным в любой области. Он не может использоваться со статическими членами класса.
Ключ к использованию метатега [Bindable] - это понимание того, что происходит под капотом, когда вы его используете. По сути использование привязки данных является типом сокращения для добавления прослушивателей событий и диспетчеризации событий.
Существуют две основные формы тега [Bindable]. Первый - это просто [Bindable], за которым следует объявление var/property. Второй - [Bindable (event = "eventname" )], за которым следует либо объявление var/property, либо объявление функции/метода, либо одна половина объявления getter/setter.
Я объясню более длинную нотацию сначала, так как другая построится на одной и той же концепции, но с еще большим сокращением.
Когда вы используете [Bindable (event = "eventname" )], вы, по сути, говорите компилятору, что этот метод var/property/function/(вызов этого члена экземпляра) является "доступным" для использоваться как источник привязки данных. Вы также говорите, что когда значение члена экземпляра было признано недействительным/изменено, и его необходимо перечитать, что будет отправлено событие "eventname".
В этой более длинной форме это все, что вы делаете. Вы, разработчик, отвечаете за фактическую отправку события "eventname" всякий раз, когда значение должно обновляться в подписчиках привязки.
Реальная эффективность использования привязки данных происходит на стороне подписки. Типичная нотация, которую вы увидите в MXML, это value = "{instance.propertyName}" . Когда вы используете нотацию {}, вы говорите компилятору, чтобы сделать следующее:
Если вы используете более короткую форму [Bindable], и вы добавляете тег перед свойством /var, компилятор заполняет пробелы и добавляет некоторые дополнительные функции, чтобы свойство связывалось. По сути, вы говорите компилятору "добавьте события и методы, необходимые для того, чтобы это свойство было совместимым"
Теперь можно подумать о том, что сделает компилятор под капотом.
По сути, компилятор сделает для вас большую часть работы.
[Bindable]
public var xyz
эквивалентно
private var _xyz:String;
[Bindable(event="updateXYZValue")]
public function get xyz():String{
return _xyz;
}
public function set xyz(newxyz:String):void{
_xyz = newxyz;
dispatchEvent(new Event("updateXYZValue"));
}
Единственными функциональными отличиями в них являются то, что в первом случае
Этот второй пример также демонстрирует один частный случай метатега [Bindable]. Это значит, что когда вы применяете его к паре getter/setter, определенной для одного и того же имени переменной, вам нужно применить ее только к одному или другому, это применимо к обоим. Обычно вы должны установить его на получателе.
Вы можете использовать нотацию для функции/метода, однако, если вы не укажете событие, привязка никогда не будет запущена, поэтому, если вы пытаетесь привязать к функции, вы всегда должны указывать событие. Также можно указать несколько событий запуска, уложив тег. например.
[Bindable(event="metaDataChanged")]
[Bindable(event="metaObjectUpdated")]
public function readMyMetaData():MetaDataObject{
var myMetaDataObject:MetaDataObject;
.
.
.
return myMetaDataObject;
}
Это предполагает, что где-нибудь еще вы, ваш класс, отправите это событие metaDataChanged или событие metaObjectUpdated, когда вы хотите вызвать привязку.
Также обратите внимание, что с помощью этой нотации вы можете связать привязку любого члена экземпляра к любому событию, которое экземпляр отправит. Даже унаследованные события, которые вы сами не генерируете, такие как FrameEnter, OnChange и т.д.
Связывание данных также может быть установлено и уничтожено во время выполнения. Если вас это интересует, взгляните на классы mx.binding.utils.
Он используется в привязке данных к Flex, вы можете прочитать об этом здесь
http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2.html
Создание свойств для использования в качестве источника привязки данных
Когда вы создаете свойство, которое вы хотите использовать в качестве источника данных обязательное выражение, Flex автоматически копировать значение свойство источника в любое место назначения свойство, когда свойство source изменения. Сигнал на Flex для выполнения копия, вы должны использовать [Bindable] тег данных для регистрации свойства с помощью Flex.
В дополнение к тому, что сказал Джастин, вы можете использовать два способа привязки данных в Flex с символом @. Вот пример:
<s:TextInput id="txt1" text="@{txt2.text}" />
Для рабочего примера с включенным исходным кодом вы можете проверить эту статью, которую я написал некоторое время назад: