Во-первых, не пытайтесь создавать новые коллекции, если вам это не нужно.
Я полагаю, что ваша проблема заключается в следующем утверждении: (controllers[0] as Controller).meetsRequirements = false;
, которое должно произойти сбой при компиляции, потому что элемент коллекции не может быть получен с помощью аннотации в квадратных скобках.Вам нужно использовать функцию getItemAt(index:int)
.
Кроме того, вы не захотите устанавливать видимое значение false для средства визуализации элементов, если хотите «удалить» его, потому что тогда у вас будет пустое место.То, что вы хотите сделать, это отфильтровать это:
<s:Application creationComplete="onCreationComplete()">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable] public var data:ArrayCollection = new ArrayCollection();
private function onCreationComplete():void
{
// TODO: need to add data here
// Adding filter function
data.filterFunction = filterItems;
}
private function filterItems(item:Object):Boolean
{
return item.meetsRequirements;
}
private function hideFirstItem():void
{
if(data.length > 0)
{
Controller(data.getItemAt(0)).meetsRequirements = false;
}
data.refresh();
}
]]>
</fx:Script>
<mx:List id="listControllers" dataProvider="{data}" />
<mx:Button label="test" click="hideFirstItem()" />
</s:Application>
Это должно сделать это.Хотя не проверено.