отредактировано для получения дополнительной информации:
У меня есть приложение Flex 4 с внешним ItemRenderer внутри DataGroup для повторяющейся формы. Поставщик данных DataGroup представляет собой ArrayCollection (coll_sites).
В documentParent у меня есть три комбинированных списка (Статус, Год, Область), которые запускают функцию фильтра, которая работает непосредственно на coll_sites.
У itemRenderer есть ряд textInputs и комбинированных списков. Три из этих комбинированных списков связаны с полями в coll_sites (опять же, статус, год и область), которые фильтруются вышеупомянутыми комбинированными списками parentDocument.
Проблема, с которой я столкнулся, заключается в том, что в itemRenderer, когда поле является одним из фильтруемых, ComRobox itemRenderer не закрывается. Если он не отфильтрован, проблем нет. Я подтвердил, что проблема ComboBox соответствующим образом обновляет ArrayCollection, она просто не закроется, если не выбран другой элемент в раскрывающемся списке.
Сокращенный код:
Фильтр ComboBox (parentDocument):
<s:DropDownList id="cbo_filter_Year" x="156" y="36" dataProvider="{coll_YearList}" labelField="YEAR" prompt="Year" change="filter()"/>;
Функция фильтра:
private functionfilter():void {
coll_sites.filterFunction = filterSitesCollection;
coll_sites.refresh();
}
private function filterSitesCollection(item:Object):Boolean{
//I filter the Sites based on the selected combobox
var isMatch:Boolean = true;
if (cbo_filter_Year.selectedIndex != -1){
//if we have a year selected
if (item.YEAR.toString() != cbo_filter_Year.selectedItem.YEAR.toString()){
isMatch = false;
}
}
return isMatch;
}
Вызов ItemRenderer в parentDocument:
<s:DataGroup itemRenderer="site_renderer" dataProvider="{coll_sites}" x="10" y="100">
<s:layout>
<s:VerticalLayout/>
</s:layout>
</s:DataGroup>
ItemRenderer:
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="true">
<s:BorderContainer x="0" y="0" width="653" height="215" borderWeight="2">
<s:Label text="Site ID" x="0" y="10"/>
<s:Label text="{data.SITE_ID}" x="0" y="25"/>
<s:Label text="Year" x="150" y="10"/>
<s:ComboBox id="cbo_Year" x="150" y="25" dataProvider="{parentDocument.coll_ShortYearList}" labelField="YEAR" selectedItem="{data.YEAR}" change="data.YEAR=cbo_Year.selectedItem.YEAR"/>
<s:Label text="Status" x="300" y="10"/>
<s:ComboBox id="cbo_Status" x="300" y="25" dataProvider="{parentDocument.coll_SiteStatus}" labelField="STATUS" selectedItem="{data.STATUS}" change="data.STATUS=cbo_Status.selectedItem.STATUS;"/>
</s:BorderContainer>
</s:ItemRenderer>
В приведенном выше коде ItemRenderer ComboBox для STATUS работает точно так же, как и должен, но ГОД остается открытым после изменения. В моем полном коде у меня есть три таких отфильтрованных поля, и все три ведут себя одинаково. Остальные шесть полей, которые не отфильтрованы, закрываются соответствующим образом.
Я знаю, что это должно быть что-то простое, но я в растерянности. Чего мне не хватает?