В предыдущих статьях мы рассмотрели возможности биндинга в плане привязки метатега [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 [...]

 
Комментариев нет:
Отправить комментарий