Domanda

Come inviare alla skin un valore che è cambiato?

È stato utile?

Soluzione

Ci sono due approcci a questo: uno utilizza l'associazione ed è più semplice, l'altro è più complesso ma migliore per le prestazioni.

Utilizzo dell'associazione

Supponi che la tua classe di visualizzazione sia simile a questa:

public class MyClass extends SkinnableComponent {
    [Bindable] public var myValue:String;
}

quindi puoi legarti a quel valore nella tua pelle in questo modo:

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Metadata>
        [HostComponent("MyClass")]
    </fx:Metadata>

   <s:Label id="myLabel" text="{hostComponent.myValue}" />

</s:Skin>

Sostituzione di commitProperties

Supponiamo che lo stesso skin senza binding, quindi puoi impostare la proprietà text dell'etichetta utilizzando uno skinpart e sovrascrivendo commitProperties nel componente host. Il nome dello skinpart deve essere esattamente lo stesso dell'ID del componente nello skin (in questo caso "myLabel").

public class MyClass extends SkinnableComponent {

    [SkinPart(required="true")]
    public var myLabel:Label;

    public var myValue:String;

    override protected function commitProperties():void {
        if (myLabel) myLabel.text = myValue;
        super.commitProperties();
    }
}

Ovviamente dovresti chiamare invalidateProperties() ogni volta che vuoi applicare il nuovo valore (ad esempio in una funzione setter per 'myLabel'). Nota inoltre che "myLabel" non deve più essere associabile, a meno che tu non voglia essere in grado di collegarlo esternamente.


modifica: quale approccio scegliere?

Ho appena risposto a una domanda che è strettamente correlata a questa in cui elaboro i pro ei contro di ciascun approccio in diverse situazioni. Puoi trovarlo qui: Flex: etichetta aggiuntiva in ButtonBarButton

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top