Flex 3: скрытие элементов, созданных повторителем

У меня есть повторитель, который создает пользовательский компонент с именем «Блок». Мне нужно сделать так, чтобы, когда пользователь нажимает кнопку, все блоки, созданные ретранслятором, имели видимое поле, установленное в false (а затем в true, когда кнопка нажимается снова).

Вот часть кода, который у меня есть прямо сейчас:

<mx:Repeater id="indPositions" dataProvider="{projectPositions}" startingIndex="0">
        <components:block height="24"
            width="100%" id="thisBlock" visible="true" horizontalScrollPolicy="off"  
            oneDay="{oneDay}"
        />
    </mx:Repeater>

Вот кнопка, которую пользователь нажмет, чтобы показать/скрыть блоки:

<mx:Button id="showHideButton" label="Show Project" x="{addBlock.x + addBlock.width + 2}" click="showProjectSwitch();" />

Вот функция showProjectSwitch():

public function showProjectSwitch():void {
            if (showHideButton.label == "Hide Project")
            {   
                showHideButton.label = "Show Project";
                indPositions.visible = false;
                thisProject.height = 65;
            }
            else
            {   
                showHideButton.label = "Hide Project";
                indPositions.visible = true;
                thisProject.height = projectHeight ;
            }
        }

Я попытался установить projectRP.visible="true/false", но это не сработало :(

Я также пытался обернуть холст вокруг повторителя, но когда я это сделал... повторитель запустился только один раз, несмотря на то, что у меня есть начальный индекс = "0" и счет = "16". Затем я удалил теги холста, и повторитель запустился правильное количество раз.

Кто-нибудь может мне помочь?


person Brds    schedule 27.04.2011    source источник


Ответы (2)


Самый простой способ добиться того, чего вы хотите, — просто использовать привязку данных, как вы это делали для значения «oneDay».

<mx:Repeater id="indPositions" dataProvider="{projectPositions}" startingIndex="0">
    <components:block height="24"
        width="100%" id="thisBlock" visible="true" horizontalScrollPolicy="off"  
        oneDay="{oneDay}"
        visible="{showBlocks}"
    />
</mx:Repeater>
<mx:Boolean id="showBlocks" />

[Изменить для большей ясности] Чтобы изменить видимость блоков, необходимо установить значение showBlocks, например:

showBlocks = true;

or

showBlocks = false;
person Andrew Traviss    schedule 27.04.2011
comment
Не могли бы вы немного объяснить это? ‹mx:Boolean› не является типом компонента, и даже если бы он был, я не уверен, что понимаю, как это изменит видимое состояние блоков. - person Brds; 28.04.2011
comment
‹mx:Boolean /› эквивалентно объявлению логической переменной в ActionScript, поэтому вы можете назначить ей значение true или false. Каждый из блоков связан данными с этой переменной путем добавления свойства visible={showBlocks}. Всякий раз, когда вы присваиваете значение true для showBlocks, все блоки затем устанавливают для своего свойства visible значение true. - person Andrew Traviss; 28.04.2011

Вот как я это решил... поскольку имя переменной thisBlock объявляется каждый раз при создании блока, вся эта информация сохраняется в массиве. Узнав об этом, я смог создать цикл for each в функции, которая вызывалась при нажатии кнопки показать/скрыть... цикл for each выглядит примерно так:

for (var I:int = 0; i < dataprovidername.length; i++)
    thisBlock[i].visible = true/flase;

Надеюсь, что это может помочь кому-то еще в будущем.

person Brds    schedule 29.04.2011