Flex 4 ComboBox остается открытым при фильтрации - PullRequest
0 голосов
/ 29 июля 2011

отредактировано для получения дополнительной информации:

У меня есть приложение 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 работает точно так же, как и должен, но ГОД остается открытым после изменения. В моем полном коде у меня есть три таких отфильтрованных поля, и все три ведут себя одинаково. Остальные шесть полей, которые не отфильтрованы, закрываются соответствующим образом.

Я знаю, что это должно быть что-то простое, но я в растерянности. Чего мне не хватает?

1 Ответ

0 голосов
/ 29 июля 2011

Мне неясно, что вызывает фильтрацию; и если ComboBox теряет фокус, когда происходит эта фильтрация. Если ComboBox не теряет фокус и в ComboBox ничего не выбрано; или стрелка вниз не щелкает; тогда нет действия, которое закроет раскрывающийся список.

Вы можете принудительно закрыть ComboBox с помощью метода closeDropDown () .

...