【发布时间】:2011-05-20 18:36:11
【问题描述】:
我有一个 ComboBox,数据提供者是一个包含 3 个值的 ArrayCollection:CA - 加利福尼亚州、纽约州 - 纽约州、德克萨斯州 - 德克萨斯州。当我开始在 ComboBox 中输入时,默认行为会尝试匹配字符串开头的值,所以如果我开始输入 TX,它将调出 TX - Texas。
我希望能够搜索字符串的任何部分,而不仅仅是从头开始,所以如果我输入“xas”,它将过滤掉选择,只显示 TX - Texas。 Adobe 论坛 here 中有一篇非常有用的帖子,介绍了如何通过更改为 ComboBox 提供数据的 ArrayCollection 上的过滤器功能来做到这一点,我已经对其进行了调整,但我遇到了一个小问题。
如果用户选择一个值,然后尝试输入新文本,则在 ComboBox 中键入的第一个字母不会显示。
1) 在 ComboBox 中选择值 CA - California
2) 突出显示文本并在键盘上按“n”
3) 您希望看到填充有“n”的文本框,但文本框仍然为空
什么可能导致此问题?只有当您已经选择了一个值时才会发生这种情况。如果你从一个空白的 ComboBox 开始,它会按预期工作。
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
import spark.events.TextOperationEvent;
[Bindable]
public var arrC:ArrayCollection = new ArrayCollection([{label:'CA - California'},{label:'NY - New York'},{label:'TX - Texas'}]);
private function changeHandler(e:*):void
{
if (arrC.filterFunction != doFilter)
arrC.filterFunction = doFilter;
arrC.refresh();
}
private function doFilter(item:Object):Boolean
{
if(String(item.label).toLowerCase().indexOf(cb.textInput.text.slice(0 ,cb.textInput.selectionAnchorPosition).toLowerCase())>-1)
{
return true;
}
return false;
}
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
cb.textInput.addEventListener(TextOperationEvent.CHANGE,changeHandler );
}
]]>
</fx:Script>
<s:ComboBox id="cb" dataProvider="{arrC}"/>
【问题讨论】:
-
您是否考虑过使用
AutoComplete组件而不是ComboBox? flashcommander.org/blog/flex-4-autocomplete -
我知道这是一个旧的,但我们的 AutoCompleteComboBox 带来了两全其美;一个 AutoComplete 组件和一个 ComboBox。 flextras.com/index.cfm?event=ProductHome&productID=19
-
它适用于给定的代码,因为它适用于给定的步骤 (1,2,3)。有什么特别的方法可以重现吗?
-
重现它的方法是使用我提供的代码示例的步骤 1-3。我可以使用 4.1 SDK 通过一个新的 Flex 项目重现这一点。 @www.Flextras.com 是的,这就是我最终使用的。感谢您创建如此出色的组件并提供免费版本。它几乎是 ComboBox 的替代品,但增加了功能。
-
@fyleow 很高兴它有帮助;那么。
标签: apache-flex actionscript flex4 adobe