Actionscript 3 Flex:皮肤和数据模型之间的通信?

Actionscript 3 Flex:皮肤和数据模型之间的通信?,actionscript-3,apache-flex,flex4.5,Actionscript 3,Apache Flex,Flex4.5,如何向皮肤发送一些已更改的值?有两种方法可以做到这一点:一种使用绑定,更简单;另一种更复杂,但性能更好 使用绑定 假设您的视图类如下所示: public class MyClass extends SkinnableComponent { [Bindable] public var myValue:String; } <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.ad

如何向皮肤发送一些已更改的值?

有两种方法可以做到这一点:一种使用绑定,更简单;另一种更复杂,但性能更好

使用绑定

假设您的视图类如下所示:

public class MyClass extends SkinnableComponent {
    [Bindable] public var myValue:String;
}
<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>
然后您可以像这样绑定到皮肤中的该值:

public class MyClass extends SkinnableComponent {
    [Bindable] public var myValue:String;
}
<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>
当然,只要您想应用新值(例如在“myLabel”的setter函数中),就必须调用
invalidateProperties()
。还请注意,“myLabel”不再需要是可绑定的,除非您希望能够在外部绑定它


编辑:选择哪种方法?


我刚刚回答了一个与此密切相关的问题,在这个问题中,我详细阐述了每种方法在不同情况下的利弊。您可以在这里找到:

有两种方法:一种使用绑定,更简单;另一种更复杂,但性能更好

使用绑定

假设您的视图类如下所示:

public class MyClass extends SkinnableComponent {
    [Bindable] public var myValue:String;
}
<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>
然后您可以像这样绑定到皮肤中的该值:

public class MyClass extends SkinnableComponent {
    [Bindable] public var myValue:String;
}
<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>
当然,只要您想应用新值(例如在“myLabel”的setter函数中),就必须调用
invalidateProperties()
。还请注意,“myLabel”不再需要是可绑定的,除非您希望能够在外部绑定它


编辑:选择哪种方法?

我刚刚回答了一个与此密切相关的问题,在这个问题中,我详细阐述了每种方法在不同情况下的利弊。你可以在这里找到它: