繁体   English   中英

如何消除延迟并修复dojo FilteringSelect小部件中的部分匹配搜索?

[英]How can I eliminate lag and fix partial match searches in a dojo FilteringSelect widget?

我在使dijit/form/FilteringSelect小部件表现自身时遇到麻烦。 我怀疑我的选项组合刚刚起步,但是我似乎无法达到正确的模式。

我的数据源是书名的列表,我希望用户能够通过下拉菜单,选择选项或键入名称的一部分并获得匹配项来使用小部件。 棘手的部分是键入值时需要在两端进行通配符匹配时进行过滤,因为键入的单词很可能是名称中的第二个单词。

我的问题是设置适当的搜索延迟以及搜索发生后继续输入什么内容。 首先,只要您可以继续键入,默认的200ms搜索延迟就可以正常工作,但是当queryExpr设置为*${0}*这似乎已损坏。 当您继续输入内容时,您将使用当前匹配项的前缀开始,而不仅仅是当前输入的内容。

我要使它完全可用的唯一方法是设置更大的延迟(500毫秒),并希望人们不会犯很多打字错误。 这具有延迟下拉菜单的不良效果。

    var books_widget = new FilteringSelect({
      placeHolder: "Kitap",
      store: book_list_store,
      style: 'width: 12em',
      searchAttr: "name",
      autocomplete: false,
      highlightMatch: 'first',
      ignoreCase: true,
      queryExpr: '*${0}*',
      searchDelay: 500
    });
    books_widget.placeAt(wrapper_node);

在那儿...

  1. ...有什么方法可以将searchDelay与鼠标触发的下拉菜单分离,以确保UI没有毫无意义的滞后?

  2. ...一种适当的方式来设置设置,以便在输入部分匹配项时,搜索功能不会破坏现有条目,而您可以继续输入扩展模式的字符?

您不必使用搜索延迟。 您得到的行为是因为autoComplete属性设置为true
但是,在配置中,您正在使用autocomplete ,并且应使用大写的“ C”。

我想这可以解决这两个问题,因为您的下拉菜单将不再被延迟,并且当找到部分匹配项时,它将不再覆盖您当前的文本。

searchDelay属性通常用于消除商店访问(可能还有REST访问)的searchDelay 在没有搜索延迟的情况下输入“ hello world”时,将查询商店的每次更改,因此:

h
he
hel
...
hello world

如果使用searchDelay对其进行反跳,则它将仅在上次更改后500毫秒后访问您的商店,因此,如果键入速度足够快,它将仅使用它来查询"hello world"

可以减少延迟的另一件事:提供与输入匹配的有限数量的响应。

使用pageSize:“ 100”作为输入参数将仅给出前100个匹配项,以及“更多选择”的链接。

这确实有助于在键入期间缩小很多选择的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM