Flex: общаться между кожей и моделью данных? - PullRequest
1 голос
/ 02 декабря 2011

Как отправить в скин какое-то значение, которое изменилось?

1 Ответ

8 голосов
/ 02 декабря 2011

Есть два подхода к этому: один использует связывание и проще, другой сложнее, но лучше для производительности.

Использование привязки

Предположим, ваш класс представления выглядит следующим образом:

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>

Переопределение commitProperties

Предположим, что тот же скин без привязки, затем вы можете установить свойство текста метки с помощью skinpart и переопределить commitProperties в компоненте хоста. Имя скина должно совпадать с идентификатором компонента в скине (в данном случае «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();
    }
}

Конечно, вам придется вызывать invalidateProperties() всякий раз, когда вы хотите применить новое значение (например, в функции установки для myLabel). Также обратите внимание, что «myLabel» больше не нужно привязывать, если только вы не захотите связываться с ним извне.


изменить: какой подход выбрать?

Я только что ответил на вопрос, тесно связанный с этим, в котором я подробно остановлюсь на плюсах и минусах каждого подхода в различных ситуациях. Вы можете найти его здесь: Flex: дополнительная метка в ButtonBarButton

...