2011-06-08 22 views
1

我有點瘋了。BindingUtils.bindProperty中的奇怪行爲:非確定性

我有奇怪的問題BindingUtils.bindSetterbindProperty。我認爲,如果我將兩個變量與BindingUtils.bindProperty綁定,我可以確定它們將始終保持同步。但事實並非如此。

我有這樣的代碼在creationCompleteHandler:

BindingUtils.bindProperty(this, "pendingHold", drhHold, "pending", false, true); 

但是,當我調試,應該在某個時候被綁定在一起的兩個變量具有不同的值:

enter image description here

什麼時我錯過了?

由於提前, 努諾

+0

實際上,我決定使用bindProperty,因爲bindSetter無法正常工作。它有時只是調用setter ...我很無知... – nununo 2011-06-08 00:37:58

回答

1

結合您定義的是單向的。當設置了drhHold.pending時,將會設置this.pendingHold。這並不是相反的。

換句話說,你所描述,如果你有下面的代碼可能發生:

this.drhHold.pending = false; 
this.pendingHold = true; 

如果你想這是雙向的,那麼你就需要設置其他方向:

BindingUtils.bindProperty(this, "pendingHold", drhHold, "pending", false, true); 
BindingUtils.bindProperty(drhHold, "pending", this, "pendingHold", false, true); 

所有這些當然都假設這兩個屬性都是[Bindable]

+0

我明白。但我不希望它走向兩條路。它只是一種方式,無論如何都不起作用。 「pendingHold」只是一個包裝,因此我可以暴露「drhHold.pending」而不暴露「drhHold」。謝謝。 – nununo 2011-06-08 03:06:48

+0

所以這裏發生的事情是:他們都是'真實的'。 「drhHold.pending」變成了「假」,但「pendinhHold」沒有改變並保持爲「真」。 – nununo 2011-06-08 03:09:07

+1

好的。這值得一試。問題中沒有足夠的信息來辨別。嗯......你確定別的東西沒有把'this.pendingHold'設置回''true'某個地方嗎?你有沒有在變量上加上斷點來查看getters/setters何時被調用?這會讓我很生氣......我想嘗試的下一步是自己連線綁定(將'drhHold'上的更改事件掛鉤並手動設置'pendingHold'),以查看我是否可以學習任何東西從那。 – 2011-06-08 09:19:47

0

綁定在這種情況下不需要:

public class Class1 
{ 
    private var _class2:Class2 = new Class2(); 

    [Bindable] 
    public function get pending():Boolean 
    { 
     return this._class2.pending; 
    } 

    public function set pending(value:Boolean):void 
    { 
     this._class2.pending = value; 
    } 
} 

只要Class2.pending是綁定爲好,這將讓這個Class1.pending被綁定到Class2.pending。

+0

你試過這個嗎?我嘗試了這一點,並且對'_class2.pending'的更改不會導致對「class1.pending」的更改通知。是的,'_class2.pending'是可綁定的...我的例子中的視圖綁定到兩者。請參閱http://pastie.org/2045521和http://pastie.org/2045526 – 2011-06-10 01:03:19