Apache flex Flex 4组合框在过滤时保持打开状态

Apache flex Flex 4组合框在过滤时保持打开状态,apache-flex,actionscript-3,actionscript,flex4,Apache Flex,Actionscript 3,Actionscript,Flex4,编辑以获取更多信息: 我有一个Flex4应用程序,在重复表单的数据组中有一个外部ItemRenderer。数据组数据提供程序是一个ArrayCollection(coll_站点) 在documentParent中,我有三个组合框(状态、年份、区域),它们触发一个直接在coll_站点上运行的过滤功能 itemRenderer有一系列文本输入和组合框。其中三个组合框绑定到coll_站点中的字段(同样,状态、年份和区域),这些字段由上述parentDocument组合框过滤 我遇到的问题是,在item

编辑以获取更多信息:

我有一个Flex4应用程序,在重复表单的数据组中有一个外部ItemRenderer。数据组数据提供程序是一个ArrayCollection(coll_站点)

在documentParent中,我有三个组合框(状态、年份、区域),它们触发一个直接在coll_站点上运行的过滤功能

itemRenderer有一系列文本输入和组合框。其中三个组合框绑定到coll_站点中的字段(同样,状态、年份和区域),这些字段由上述parentDocument组合框过滤

我遇到的问题是,在itemRenderer中,当字段是过滤字段之一时,itemRenderer组合框将不会关闭。如果没有过滤,就没有问题。我已经确认问题组合框会适当地更新ArrayCollection,除非选择下拉列表中的另一项,否则它不会关闭

缩写代码:

筛选组合框(父文档):

调用parentDocument中的ItemRenderer:

<s:DropDownList id="cbo_filter_Year" x="156" y="36" dataProvider="{coll_YearList}" labelField="YEAR" prompt="Year" change="filter()"/>;
<s:DataGroup itemRenderer="site_renderer" dataProvider="{coll_sites}" x="10" y="100">
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
</s:DataGroup>

项目渲染器:

<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代码中,STATUS的组合框完全按照它应该的方式工作,但在更改后YEAR保持打开状态。在我的完整代码中,我有三个这样的过滤字段,它们的行为完全相同。未过滤的其他六个字段将适当关闭


我知道这一定很简单,但我不知所措。我遗漏了什么?

我不清楚是什么触发了过滤;如果组合框在进行过滤时失去焦点。如果组合框没有失去焦点,并且组合框中没有任何内容被选中;或者向下箭头不是单击;然后没有任何操作将关闭下拉列表


您可以强制组合框关闭。

@Flextras感谢您的快速响应!我已确认,在进行选择时,“问题”组合框会更新ArrayCollection。它们不会失去焦点。恰恰相反。在我选择另一个选项之前,我无法让他们失去焦点。假设我的年份设置为1975年(从AC检索)。我打开组合框选择2010。AC得到更新,但组合框不会关闭,直到我点击一个不是2010年的年份。然后它关闭,就好像什么也没发生一样。我尝试了
change=“closeDropDown();”
但没有成功。这就像更改过程提前停止一样。@KHenry我很确定更改只会在选择新项目时触发;听起来这里的情况并非如此。如果我明白;您不是在筛选下拉列表的数据提供者,而是在筛选其他内容。您可以侦听正在筛选的集合的collectionChange事件;当那个事件发生时,关闭下拉按钮。@Flextras,我要为浪费你的时间而在这里提出我的过失
事实证明,过滤器功能并不是使其保持打开状态的原因。这是我调用的一个函数,用于确定字段是否已启用。当与textInput框一起使用时,该函数似乎工作得很好,但与comboBox一起使用时却失败得很惨
再次感谢您的帮助@肯里,这是否意味着你解决了这个问题?如果是,解决方案是我描述的还是完全不同的?如果问题是我描述的解决方案;那么请选择它。我的答案旁边应该有一个“复选框”,你可以选择。若否,;然后,你应该为自己的问题写一个答案,并选择这样的答案。
<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>