Привязка данных из оболочки к представлению в Flex (Spark) - PullRequest
0 голосов
/ 12 августа 2011

Я довольно новичок в разработке Flex в Spark и хотел уточнить лучший способ создания компонентов.

Ранее я пытался использовать выражение привязки для установки выбранного индекса ViewStack:

public class MyComponentView extends SkinnableComponent
{
    public var selectedIndex:int = 0;

}

<s:Skin ...>
    <mx:ViewStack selectedIndex="{hostComponent.selectedIndex}">
            ....
    </mx:ViewStack>
</s:Skin ...>

Однако это выражение привязки не работает, хотя оно показывает правильное число, если я переместил это выражение привязки в значение: Label.

Для того, чтобы это сработалоЯ изменил код следующим образом:

public class MyComponentView extends SkinnableComponent
{
    [SkinPart(required = "true")]
    public var myStack:ViewStack;

    private var _selectedIndex:int = 0;

    private var _indexChanged:Boolean;

    public function set selectedHistoryIndex(value:int):void
    {
        _selectedIndex = value;
        _indexChanged = true;
        invalidateProperties();
    }

    override protected function partAdded(partName:String, instance:Object):void
    {
        super.partAdded(partName, instance);

        switch (instance)
        {
            case myStack:
                _indexChanged = true;
                invalidateProperties();
                break;
        }
    }

    override protected function commitProperties():void
    {
        super.commitProperties();

        if (_indexChanged && myStack)
        {
            _indexChanged = false;
            myStack.selectedIndex = _selectedIndex;
        }
    }

}

<s:Skin ...>
    <mx:ViewStack id="myStack">
            ....
    </mx:ViewStack>
</s:Skin ...>

Это то, как я хотел сделать это?

1 Ответ

0 голосов
/ 12 августа 2011

Что касается меня, ваш второй путь более предпочтителен.Я бы предпочел изменить код, чтобы он стал лучше:

public function set selectedHistoryIndex(value:int):void
{
    if (_selectedIndex == value)
        return;
    _selectedIndex = value;
    _indexChanged = true;
    invalidateProperties();
}

Да, вы можете привязать свойства компонента из скина, но таким способом View (скины в архитектуре Spark для View в MVC, а компонент host дляM и C) имеет знания о M, что не хорошо.Первая реализация требует этих знаний из скина.

Вторая реализация делает View true View (управляемый M).И это хорошо.

...