2009-07-22 18 views
1

Ich lief gerade in ein seltsames Bindeproblem. In der folgenden Mini-App wird die Flex Label-Komponente aktualisiert, wenn sich 'someText' ändert, aber mein boundSetter wird nicht nach dem ersten, ersten Aufruf aufgerufen.Grundlegende Binding Frage

Kurz gesagt: Warum wird die boundSetterForSomeText() - Funktion nicht aufgerufen, während das Label aktualisiert?

Könnte jemand bitte etwas Licht auf dieses grundlegende Problem werfen? Tausend Dank!

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="1024" minHeight="768" 
    initialize="onInitialize()" 
> 
    <mx:Panel> 
     <mx:Label text="{this.someText}" /> 
     <mx:Button label="Set random text" click="generateRandom()" /> 
    </mx:Panel> 

    <mx:Script> 
     <![CDATA[ 
      import mx.binding.utils.ChangeWatcher; 
      import mx.binding.utils.BindingUtils; 


      [Bindable(event="xxx")] 
      public var someText : String; 


      public function onInitialize() : void 
      { 
       var cw:ChangeWatcher = BindingUtils.bindSetter(boundSetterForSomeText, this, ['someText']); 
      } 

      public function generateRandom() : void 
      { 
       this.someText = String(Math.round(Math.random() * 10000)); 
       this.dispatchEvent(new Event("xxx")); 
      } 


      public function boundSetterForSomeText(obj:Object) : void 
      { 
       trace(obj); 
      } 
     ]]> 
    </mx:Script> 
</mx:Application> 

Antwort

0

können Sie diesen Code verwenden, um ein get/set Paar oder "Eigentum" zu erstellen:

private var _someText:String; 

[Bindable(event="xxx")] 
public function get someText():String 
{ 
    return _someText; 
} 

public function set someText(value:String):void 
{ 
    if (_someText != value) 
    { 
     _someText = value; 
     this.dispatchEvent(new Event("xxx")); 
    } 
} 
+0

Das ist richtig, Sie brauchen nicht einmal den Setter, d. H. Sie können den Wert ändern/das Ereignis in einer Funktion senden, die Sie mögen. Aber es ist wichtig, den Getter zu haben. – Tom

0

Es funktioniert, wenn das Ereignis Standard ist. (Standard-Ereignis ist property)

[Bindable] 
public var someText : String; 

ich einige Debug tat, und ich habe keine Ahnung, warum es nicht mit benutzerdefinierten Ereignis funktioniert. Ich denke es sollte.

+0

Ja, seltsam .. Ganz Besorgnis erregend, auch. Ich werde es in der Adobe-Dokumentation als Kommentar veröffentlichen. – Tom