2010-07-09 42 views
3

因为我发现解释可绑定属性的网页相当混乱,所以我想在这里发布我的问题,这很简单,如果我声明一个变量是可绑定的,是否意味着每当我改变这个变量的值在另一个类中,这个变量的所有出现将被同步为同一个值吗?如果布尔变量“select”被声明为可在A类中绑定并且默认为false,并且我们在类A中有一个if语句,就像if(select)一样。关于在Flex中绑定的问题

然后在另一个类中,我们将“select”的值更改为true,那么如果(select)语句通过测试呢?

另外,怎么样定义为绑定以下setter方法:

[Bindable] 
public function set isShowingAvg(b:Boolean):void 
{ 
    _isShowingAvg = b; 

    hasChanged(); 
} 

这段代码意味着改变_isShowingAvg的价值也将播出?

在此先感谢。

感谢您的想法。

回答

6

将属性声明为Bindable意味着当您更改该值时,会播放一个事件。此事件启用数据绑定,但不一定是自动的。

如果消费类MXML和你使用括号,就像这样:

<mx:Button enabled="{selected}" /> 

然后MXML编译器会生成相应的绑定代码和随时selected变化,enabled也将得到改变。

如果您在MXML之外使用它,那么您将订阅该事件以检测更改或使用BindingUtils

+1

应当注意的是,如果你试图将值设置为相同的值,吸气将电流返回绑定不发生。所以如果你的值是一个布尔值并且它已经被设置为'true',并且你再次将它设置为'true',那么绑定就不会发生。至少不会出现默认绑定触发的'propertyChange'事件。 – menapole 2013-04-04 16:27:20

+0

@menapole,感谢您的支持。好点,但也并不意外。除非这些值通过绕过绑定以某种方式变得不同步,否则将源设置为它已有的相同值不应该影响目标,因为目标应该已经具有相同的值。 – 2013-04-04 19:06:51

1

在你的例子中,我认为你需要标记getter [Bindable]而不是setter。

例如:

public static const SHOWING_AVG_CHANGED:String = "showingAvgChangedEvent"; 

[Bindable(event="showingAvgChangedEvent")] 
public function get isShowingAvg():Boolean 
{ 
    return _isShowingAvg; 
} 

public function set isShowingAvg(isShowing:Boolean):void 
{ 
    _isShowingAvg = isShowing; 
    dispatchEvent(new Event(SHOWING_AVG_CHANGED)); 
} 
+0

这是不正确的。 [Bindable]可以继续吸气,也可以继续。另外,手动事件很好,但如果属性是读/写,则不需要。 – 2010-07-14 13:07:44

+1

@马蒂皮特,手动事件效率更高,应该几乎总是被使用。如果你不知道为什么,尝试创建一个带有几个'[Bindable]'属性的类,然后另一个订阅其中的几个。他们通过setter来查看广播'propertyChanged'事件时会发生什么。而不是只触发一个绑定属性,所有绑定的属性都会被触发,并且每个检查*都是我关心的那个?*这太疯狂了,效率低下。尝试乘以几十个属性,你的问题呈指数级恶化。 – 2010-07-15 03:55:14