2010-07-09 45 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