使包装属性可绑定

时间:2011-05-20 15:57:38

标签: flex binding flex4 properties

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的{​​{1}}属性的事件。

但这听起来不必要地复杂化。有没有更简单的方法? :)

谢谢!

2 个答案:

答案 0 :(得分:2)

尝试使用以下内容:

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 :(得分:1)

就个人而言,我只是将我的复合类作为公共类,并且如果它是一个模型(我认为它是),则从视图中访问它。如果您不想这样做,可以随时使用BindingUtils

在第2类构造函数中

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