В предыдущих статьях мы рассмотрели возможности биндинга в плане привязки метатега [Bindable]
к различным элементам нашего кода и кастомизации срабатывания биндинга с помощью событий. На этом возможности биндинга не ограничиваются. Подписка на события биндинга в методах BindingUtlis.bindProperty
и BindingUtlis.bindSetter
также дает большое количество возможностей для его реализации.
Для того чтобы слушать изменения свойства или метода, помеченного как [Bindable]
, необходимо использовать один из методов BindingUtlis.bindProperty
или BindingUtlis.bindSetter
.
public static function bindSetter (setter:Function, host:Object, chain:Object, commitOnly:Boolean = false, useWeakReference:Boolean = false):ChangeWatcher
Единственное принципиальное отличие этих двух методов заключается в том что в первом случае в результате срабатывания биндинга меняется значение указанного свойства prop
в объекте site
, во втором вызывается метод setter
для обработки результата. В остальном эти два метода принимают одинаковые параметры и дальнейшее повествование будет иметь одинаковый смысл для обоих случаев.
Параметр host
Параметр host
это объект в котором находится параметр или цепочка параметров за которыми необходимо следить.
Параметр chain
Итак, и метод bindProperty
и bindSetter
имеют обязательный параметр сhain
типа Object
, который может принимать следующие значения:
chain в виде строки
Определяет имя привязываемого свойства:
1 | BindingUtils.bindSetter(onPropChange, host, "prop"); |
До сих пор мы в качестве chain
всегда передавали именно строку и об использовании данного параметра в таком качестве можно прочесть в предыдущих статьях;
chain в виде массива
Непустой массив, содержащий последовательность свойств за которыми необходимо следить:
1 | BindingUtils.bindProperty(this, "prop", host, ["a", "b", "c"]); |
Массив в качестве цепочки крайне удобен и используется достаточно часто. Цепочка свойств должна быть указана в виде ["a","b","c"]
что будет соответствовать привязке свойства host.a.b.c
. Может возникнуть вполне резонный вопрос: “Почему в качестве host
не указать сразу host.a.b
, а свойство за которым следить не передать в качестве строки "c"
?
1 | BindingUtils.bindProperty(this, "prop", host.a.b, "c"); |
Цепочкой целесообразно пользоваться когда в ней встречаются изменяющиеся свойства тоже помеченные метатегом [Bindable]
. Утилиты биндинга автоматически будут распознавать изменение любого из таких свойств в цепочке и нам не понадобится городить биндинг в биндинге, следить чтобы экземпляры ChangeWatcher
были отписаны и т.п.
Представим что у нас есть класс Model
в котором есть свойство item
типа Item
[...]
Комментариев нет:
Отправить комментарий