Сделать обернутое свойство привязываемым - PullRequest
1 голос
/ 20 мая 2011

У меня есть Class1 с привязываемым только для чтения свойством с именем age:

public class Class1 {
  private var _age:int;

  [Bindable(event="ageChanged"]
  public function get age():int {
    return this._age;
  }

  public function something():void {
    _age++;
    dispatchEvent(new Event("ageChanged"));
  }
}

У меня также есть Class2, который содержит частный экземпляр Class1.И я хочу сделать свойство age доступным из Class1 и по-прежнему быть привязываемым.

public class Class2 {
  private var c1:Class1 = new Class1();

  [Bindable????]
  public function get age():int {
  }
}

Конечно, тег [Bindable] здесь не имеет смысла.Но как я могу добиться того же эффекта?

Я полагаю, что могу отправить какое-то событие ageChanged от Class2 до Class1, а затем обработчик события в Class1 отправить другое локальное ageChanged событие, к которому я привязал Class2 s age свойство.

Но это звучит излишне сложно.Есть ли более простой способ?:)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Попробуйте использовать что-то вроде:

public class Class2 extends EventDispatcher {
private var _c1:Class1;

public function set c1(value:Class1):void
{
  if (value == _c1)
    return;
  if (_c1)
    _c1.removeEventListener("ageChanged", ageChangedHandler);
  _c1 = value;
  if (_c1)
    _c1.addEventListener("ageChanged", ageChangedHandler);
}

private function ageChangedHandler(event:Event):void
{
  dispatchEvent(new Event("ageChanged"));
}

  [Bindable("ageChanged")]
  public function get age():int {
  }
}
1 голос
/ 20 мая 2011

Лично я просто сделал свой составной класс общедоступным и получил к нему доступ из представления, если это модель (что, я думаю, так и есть). Если вы не хотите этого делать, вы всегда можете использовать BindingUtils :

В конструкторе класса 2

var watcher:ChangeWatcher = BindingUtils.bindProperty(this, 'age', c1, 'age');
...