#flex3 #repeater #visible
#flex3 #repeater #видимый
Вопрос:
У меня есть repeater, который создает пользовательский компонент с именем «Block». Мне нужно сделать так, чтобы при нажатии пользователем кнопки для всех блоков, созданных repeater, для их видимого поля устанавливалось значение 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», но это не сработало : (
Я также попытался обернуть холст вокруг repeater, но когда я это сделал … repeater запустился только один раз, несмотря на то, что у меня есть startingIndex = «0» и count = «16». Затем я удалил теги canvas, и repeater запустил нужное количество раз.
Кто-нибудь может мне помочь?
Ответ №1:
Самый простой способ добиться желаемого — просто использовать привязку к данным, так же, как вы сделали для значения «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;
или
showBlocks = false;
Комментарии:
1. Не могли бы вы немного объяснить это? <mx:Boolean> не является типом компонента, и даже если бы это было так, я не уверен, что понимаю, как это изменило бы видимое состояние блоков.
2. <mx:Boolean /> эквивалентно объявлению логической переменной в Actionscript, поэтому вы можете присвоить ей значение true или false. Каждый из блоков привязан к данным этой переменной путем добавления свойства visible=»{showBlocks}». Всякий раз, когда вы присваиваете «showBlocks» значение true, все блоки затем присваивают своему свойству «visible» значение true.
Ответ №2:
Вот как я решил это … поскольку имя переменной «thisBlock» объявляется каждый раз, когда создается блок, вся эта информация сохраняется в массиве. После изучения этого, я смог создать для каждого цикла в функции, которая вызывалась при нажатии кнопки показать / скрыть… для каждого цикла выполняется что-то вроде этого:
for (var I:int = 0; i < dataprovidername.length; i )
thisBlock[i].visible = true/flase;
Надеюсь, это поможет кому-нибудь еще в будущем.