2010-08-20 77 views
0

我想添加一个派生属性弯曲:依赖于数据绑定

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

然而,得到的将不会更新当我改变a或b。是否有更好(更快)的方式来进行派生更新比给予和B设置方法使其无效?

编辑:添加关键字“get”。我希望现在更有意义。

+0

哎呀,我看到我忘了 “得”。让我编辑这个。 – 2010-08-20 20:15:39

回答

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; 
} 

我写了代码n的浏览器;所以可能会有小的语法错误。

+0

对,这正是我目前的代码。我想知道是否可以避免为a和b添加get和set方法。 – 2010-08-20 20:14:09

+0

这不是你发布的代码。 ;)要在只读属性上触发绑定,必须分派绑定事件。它不一定是a和b的设定方法,但这是最合乎逻辑的地方。 – JeffryHouser 2010-08-20 21:34:23

1

您可以在衍生函数上使用[Bindable(event="propertyChanged")]

你也应该让你的派生函数成为一个getter。

我应该工作,因为flex使用PropertyChangeEvent.PROPERTY_CHANGE绑定变量,通过自动创建getter和setters并分派PropertyChangeEvent。修改a或b将自动使derived的结果无效。

0

我觉得这是一个常见问题,所以我写了一些代码来帮助它。您可以在Bindable元数据中添加吸气剂依赖的内容。所以:

[可绑定(事件= “derivedChanged”,dependentProperty = “A”)] [可绑定(事件= “derivedChanged”,dependentProperty = “B”)] 公共函数得到衍生的():整数 { 返回a + b; }

它是自定义代码,用Parsley的元数据处理编写,但是你可以在没有Parsley的情况下使用它 - 它只是一个普通的方法调用,看起来不会很好。

检查出来:http://frishy.blogspot.com/2011/06/binding-dependencies.html

-Ryan