2009-03-11 5 views
0

Vor diesem MXML-Komponente:Flex: Databinding beobachten

<mx:TextBox id="test" text="{test2.text.length &gt; 5}" />

Wie kann ich ein Ereignis ausgelöst, wenn der Wert von test2.text.length > 5 ändert? Ich habe versucht, Change, BindUtils und Property, aber kein Glück :(

Dank;

[EDIT]

Kopieren von mir aus weiter nach unten:

Nun ... ich bin tatsächlich benutze ich ein neues bindbares Feld, in meiner eigenen TextField Komponente, genannt ValidationResult.Ich versuche, atomare Validierungen anstelle der ganzen Menge zu machen.Allerdings ist die Bedingung test2.text.length> 5 pro Instanz definiert, also kann ich nicht hardcode es wie das.

Beispiel MXML:

<nui:NewTextInput id="mensualDeclarado2" validationResult="{mensualDeclarado3.text.length >= 5 && mensualDeclarado3.text.length <= 10)}" />

<nui:NewTextInput id="mensualDeclarado3" text="1234567890" />

+0

Verwenden Sie mx: Text oder mx: TextArea? Es gibt kein mx: TextBox ... – onekidney

+0

Mein schlechtes; es ist eigentlich ein erweitertes TextInput. Lesen Sie meinen Kommentar für die Antwort unten. –

+0

Ich verstehe das Problem nicht. Warum lässt der ValidationResult-Setter von NewTextInput kein Ereignis bei der Änderung versenden? Oder es mit einem Event binden lassen? – Brian

Antwort

1

Warum nicht durch ein neues Ereignis im Änderungsereignis von test2?

so haben Sie

private var _lengthCheck:Boolean = false; 
function test2_ChangeHandler(event:Event):void 
{ 
    if (_lengthCheck != (test2.text.length > 5)) 
    { 
     _lengthCheck = (test2.text.length > 5); 

     if (test2.text.length > 5) 
      dispatch(new Event("LENGTH_GREATER_THAN_5")); 
     else 
      dispatch(new Event("LENGTH_LESS_THAN_5")); 
    } 
} 
+0

Gut ... Ich benutze tatsächlich ein neues bindbares Feld, in meiner eigenen TextField-Komponente, genannt ValidationResult. Ich versuche, Atomvalidierungen statt der ganzen Menge zu machen. Sowieso. Die Bedingung test2.text.length> 5 wird pro Instanz definiert, so dass ich sie nicht so fest codieren kann. –

+0

Beispiel MXML:

0
<mx:Script> 
<![CDATA[ 
    private var _test2 : String = "test2.text.length &gt; 5"; 

    public function set test2(_test2 : String) : void{ 
     dispatchEvent(new Event("test2CHANGED")); 
     this._test2 = _test2; 
    } 
]]> 
</mx:Script> 
<mx:TextBox id="test" text="{_test2}" /> 
0

Können Sie nicht definieren „Validation“ als get/set-Paar mit einer privaten Variable die Daten zu halten, und jedes Mal, wenn der Setter mit einem anderen aufgerufen wird Wert dann die Variable, setze den Wert, dann verschicke dein eigenes benutzerdefiniertes Ereignis? So wird der Großteil der Ereignisverteilung im Flex-Framework ausgeführt.