dijit.form.FilteringSelect的子字符串搜索

12

dijit.form.FilteringSelect很接近我所需的功能。我尝试了很多方法来做我想要的事情,但作为dijit新手,我从来不知道自己是否朝着正确的方向前进。

当我在FilteringSelect中开始输入时,我只能看到以我所输入内容开头的选项。就像对value + "*"进行查询。
我需要看到任何包含我输入的字符的选项。就像对"*" + value + "*"进行查询。

所以,如果有"苹果"、"香蕉"和"橘子",而我输入了"e",我应该看到"苹果"和"橘子"。如果可能的话,还应该强调搜索字符串:"Apple","Orange"

我认为我需要一些聪明的数据存储,但无论我去哪里似乎都走投无路。我是漏掉了什么吗,还是应该用完全不同的方式实现?

4个回答

18

您想要使用queryExpr属性:

var f = new dijit.form.FilteringSelect({
 ...
 queryExpr: "*${0}*",
 ...
}, node);

注意 ${0} 前后的 *。


1
请注意,如果您将 queryExpr 设置为除默认值(搜索词的开头)以外的任何内容,则可能还需要设置 searchDelay: 1000(大约1秒钟),因为每次搜索时,它都会用顶部术语覆盖用户键入的内容。 - Tom Wayson
3
除了使用延迟之外,您还可以将autoComplete设置为false。 https://bugs.dojotoolkit.org/ticket/13915 - Richard Ayotte

4

嘿!您需要将queryExpr="${0}"添加到filteringselect组件中。

默认情况下,它是${0}*,这意味着它搜索以您键入的内容开头的字符串。

作为对其他人的提示,在JSP中,我必须将查询表达式更改为queryExpr="\${0}"。


文档还建议您将highlightMatch =“all”与此一起使用(但在dojo1.3中似乎无法正常工作)。 - Mike Griffith

0
在我们的项目中,我们通过对dojo.data.util.filter打补丁并覆盖patternToRegExp方法来解决了这个问题。

0
经过很长时间的尝试,我终于让它运行起来了。马达的提示是正确的,但是在前后都错过了 * 符号。正确的查询语句(在 JSP 中)是:'*\${0}*'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接