【问题标题】:how can dojo.FilteringSelect be configured to match wildcard values?如何将 dojo.FilteringSelect 配置为匹配通配符值?
【发布时间】:2011-02-17 19:54:03
【问题描述】:

以下是填充了用户数据的过滤选择示例。我的目标是对显示的值执行通配符匹配。例如,如果用户键入“son”,则下拉匹配项将是“homer simpSON”和“carl calSON”。 默认情况下,匹配只会在标签的开头。

我尝试更改 dijit.byId('userselect').searchAttr,但将其设置为字符串以外的任何内容都会导致错误行为。

<input id="userselect">

<script type="text/javascript">
    dojo.require("dijit.form.FilteringSelect");
    dojo.require("dojo.data.ItemFileReadStore");

    var user_data = {
        "itentifier":"user_id",
        "label":"label",
        "items":[
            {"first_name":"Waylon","last_name":"Smithers","label":"Waylon Smithers","user_id":7}
            ,{"first_name":"Carl","last_name":"Carlson","label":"Carl Carlson","user_id":6}
            ,{"first_name":"Homer","last_name":"Simpson","label":"Homer Simpson","user_id":4}
            ,{"first_name":"Lenny","last_name":"Leonard","label":"Lenny Leonard","user_id":5}
            ,{"first_name":"Montgomery","last_name":"Burns","label":"Montgomery Burns","user_id":8}
            ]
        };

    dojo.addOnLoad(function() {
        var userStore = new dojo.data.ItemFileReadStore({
            //url: "/user/lookup",
            data: user_data
        });
        var filteringSelect = new dijit.form.FilteringSelect({
            id: "userselect",
            name: "userselect",
            store: userStore,
            searchAttr: 'label' //["first_name", "last_name", "oasis"]
        },
        "userselect");
    });
</script>

【问题讨论】:

    标签: javascript dojo javascript-framework


    【解决方案1】:

    您需要设置queryExpr 并将autoComplete 设置为false

    var filteringSelect = new dijit.form.FilteringSelect({
      id: "userselect",
      name: "userselect",
      store: userStore,
      searchAttr: 'label',
      queryExpr: '*${0}*',
      autoComplete: false
    },"userselect");
    

    queryExpr 的 Dojo 文档:

    这指定将什么查询发送到数据存储,基于什么 用户已键入。更改此表达式将修改是否 结果只是完全匹配,“开始于”匹配等。 dojo.data 查询表达式模式。 ${0} 将被替换为 用户文本。 * 用于通配符。

    ${0}* 表示“以”开头
    *${0}* 表示“包含”
    ${0} 表示“是”

    【讨论】:

      【解决方案2】:

      看看queryExpr

      【讨论】:

      • queryExpr 有效,但现在匹配行为错误:假设我开始输入“simpson”,第一个字符“s”现在匹配“Waylon Smithers”。组合字段填充了“Waylon Smithers”,但突出显示是错误的。当我继续输入“imson”时,它会合并为“wimpson”,然后不匹配。这是道场中的错误吗?
      • 据我了解,您必须将其设置为 *${0}。你做到了吗?
      猜你喜欢
      • 2012-04-28
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2020-10-21
      相关资源
      最近更新 更多