2010-06-06 4 views
5

muss ich Eigenschaften von Komponenten dynamisch binden, die zur Laufzeit erstellt werden. In diesem speziellen Fall nehme ich an, dass ich bindProperty verwenden muss.Grundlegendes zur dynamischen Datenbindung (bindPropety) nicht verstehen In Flex

Ich verstehe nicht ganz, warum der folgende simple Test fehlschlägt (siehe Code). Wenn ich auf die Schaltfläche klicke, ändert sich der Beschriftungstext nicht.

Ich erkenne, dass es einfachere Möglichkeiten gibt, über dieses spezielle Beispiel mit traditionellen nicht-dynamischen Bindung zu gehen, aber ich muss es in Bezug auf die Verwendung von bindProperty verstehen.

Kann mir bitte jemand helfen zu verstehen, was ich vermisse?

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="Tools.*" minWidth="684" minHeight="484" xmlns:ns2="*" creationComplete="Init();"> 
    <mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     import mx.binding.utils.*; 
     public var Available:ArrayCollection=new ArrayCollection(); 

     public function get Value():String { 
     return (Available.getItemAt(0).toString()); 
     } 

     public function Init():void { 
     Available.addItemAt('Before', 0); 
     BindingUtils.bindProperty(Lab, 'text', this, 'Value'); 
     } 

     public function Test():void { 
     Available.setItemAt('After', 0); 
     } 
    ]]> 
    </mx:Script> 
    <mx:Label x="142" y="51" id="Lab"/> 
    <mx:Button x="142" y="157" label="Button" click="Test();"/> 
</mx:WindowedApplication> 

Vielen Dank im Voraus.

Antwort

3

Wie von Glenn erwähnt, müssen Sie [Bindable] Tag auf Value hinzufügen.

Sie haben auch keinen Setter für die Eigenschaft definiert. Die Datenbindung wird nur aufgerufen, wenn der entsprechende Setter aufgerufen wird. Der Ablauf ist ungefähr so: Sie rufen den Setter auf - Flex aktualisiert die Daten, indem er den Getter aufruft.

[Bindable] 
    public function get value():String { 
    return (Available.getItemAt(0).toString()); 
    } 

    public function set value(v:String):void { 
    Available.setItemAt(v, 0); 
    } 

    public function init():void { 
    Available.addItemAt('Before', 0); 
    BindingUtils.bindProperty(Lab, 'text', this, 'Value'); 
    } 

    public function iest():void { 
    value = "After"; 
    } 

Bitte beachte, dass ich Namen von Funktionen und Eigenschaften in Kleinbuchstaben gemäß der normalen Konvention geändert haben. InitialCaps werden nur für Klassennamen verwendet.

+0

Ja, es sieht so aus, als ob es eine Set-Methode fehlt. Ich wusste nicht, dass das nötig war. – Joshua

1

Ich benutze nie die BindingUtils, aber meine erste Vermutung ist, dass Sie das [Bindable] -Tag auf "Value" fehlt.

Verwandte Themen