我想将一个派生属性添加到flex:
private var a:int;
private var b:int;
[Bindable]
public function get derived():int
{
return a+b;
}
但是,当我更改a或b时,派生不会更新。是否有更好(更快)的方法来进行派生更新,而不是使用a和b setter方法使其无效?
编辑:添加了关键字“get”。现在,这更有意义,我希望。
答案 0 :(得分:2)
您的代码不会创建属性,而是创建方法。方法不能是Bindable,只能是属性。这种方法应该适合你:
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 :(得分:1)
您可以在派生函数上使用[Bindable(event="propertyChanged")]
。
您还应该使派生函数成为一个吸气剂。
我应该工作因为flex使用PropertyChangeEvent.PROPERTY_CHANGE
绑定变量,通过自动创建getter和setter并调度PropertyChangeEvent
。修改a或b将自动使derived
的结果无效。
答案 2 :(得分:0)
我觉得这是一个常见的问题,所以我写了一些代码来帮助它。您可以在Bindable元数据中添加getter所依赖的内容。所以:
[可绑定(事件= “derivedChanged”,dependentProperty = “A”)] [可绑定(事件= “derivedChanged”,dependentProperty = “B”)] public function get derived():int { 返回a + b; }
这是使用Parsley的元数据处理编写的自定义代码,但你可以在没有Parsley的情况下使用它 - 它只是一个普通的方法调用,看起来不太好。
检查出来:http://frishy.blogspot.com/2011/06/binding-dependencies.html
-Ryan