Зависимости в привязке данных - PullRequest
0 голосов
/ 21 августа 2010

Я хотел бы добавить производное свойство для flex:

 private var a:int;
 private var b:int;
 [Bindable]
 public function get derived():int
 {
     return a+b;
 }

Однако производное не будет обновляться при изменении a или b. Есть ли лучший (более быстрый) способ сделать производное обновление, чем предоставление методов установки a и b, которые делают его недействительным?

Редактировать: добавлено ключевое слово "получить". Надеюсь, теперь это имеет больше смысла.

Ответы [ 3 ]

2 голосов
/ 21 августа 2010

Ваш код не создает свойство, он создает метод.Методы не могут быть привязываемыми, только свойства.Этот подход должен работать для вас:

 private var _a:int;
 public function get a():int{
 return _a
 }
 public function set a(value:int):void{
   _a = a; 
   dispatchEvent(new Event('derivedChanged'));
 }
 private var _b:int;
 public function get b():int{
 return _b
 }
 public function set b(value:int):void{
   _b = b; 
   dispatchEvent(new Event('derivedChanged'));
 }

 [Bindable(event="derivedChanged")]
 public function get derived():int
 {
     return a+b;
 }

Я написал код в браузере;поэтому могут быть незначительные синтаксические ошибки.

1 голос
/ 21 августа 2010

Вы можете использовать [Bindable(event="propertyChanged")] в своей производной функции.

Вы также должны сделать свою производную функцию получателем.

Я должен работать, потому что flex использует PropertyChangeEvent.PROPERTY_CHANGE для привязки переменных, автоматически создавая геттеры и сеттеры и отправляя PropertyChangeEvent. Модификация a или b автоматически аннулирует результат derived.

0 голосов
/ 19 июня 2011

Я чувствовал, что это обычная проблема, поэтому я написал некоторый код, чтобы помочь с этим.Вы можете добавить то, от чего зависит ваш метод получения, в метаданные Bindable.Итак:

[Bindable (event = "производныйChanged», зависимыйProperty = "a")] [Bindable (событие = "производныйChanged", зависимыйProperty = "b")] публичная функция получить производную (): int {returnа + Ь;}

Это пользовательский код, написанный для использования обработки метаданных Parsley, но вы можете использовать его без Parsley - это будет просто обычный вызов метода и будет выглядеть не так хорошо.

Проверкаэто из: http://frishy.blogspot.com/2011/06/binding-dependencies.html

-Райан

...