【问题标题】:dijit.form.FilteringSelect with substring search带有子字符串搜索的 dijit.form.FilteringSelect
【发布时间】:2010-01-19 14:45:31
【问题描述】:

dijit.form.FilteringSelect 接近我所需要的。我尝试了很多方法来做我想做的事,但作为一个 dijit 初学者,我什至不知道我是否朝着正确的方向前进。

当我开始输入 FilteringSelect 时,我只会看到以我输入的内容开头的选项。就像对value + "*"的查询一样
我需要的是查看具有我在任何地方键入的内容的任何选项。就像对"*" + value + "*"的查询一样

所以如果有“Apple”、“Banana”和“Orange”,我输入“e”,我应该会看到“Apple”和“Orange”。如果可能,强调搜索字符串:“Apple”、“Orange

我想我需要一些巧妙的数据存储,但无论我走到哪里都像是死路一条。我是否遗漏了什么,或者我应该以完全不同的方式做到这一点?

【问题讨论】:

    标签: dojo


    【解决方案1】:

    你想使用queryExpr属性:

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

    注意 ${0} 前后的 *。

    【讨论】:

    • 请注意,如果您将queryExpr 设置为默认值以外的任何值(搜索词的开头),您可能还需要每次设置searchDelay: 1000(1 秒左右)b/c搜索时,它会覆盖用户输入的内容。
    • 替代延迟,您可以将autoComplete设置为false。 bugs.dojotoolkit.org/ticket/13915
    【解决方案2】:

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

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

    作为对其他人的提示,在 JSP 中,我不得不更改查询 expr。到 queryExpr="\${0}" .

    【讨论】:

    • 文档还建议您应该将 highlightMatch="all" 与此结合使用(但从 dojo1.3 开始,它似乎不太适合我)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      经过很多时间的尝试,我可以让它运行,Mada 提示是正确的,但错过了之前和之后的 *。正确的 queryStr(在 JSP 中)是 '*\${0}*'

      【讨论】:

        猜你喜欢
        • 2015-12-11
        • 2023-03-22
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        相关资源
        最近更新 更多