0

我正在使用 jqueryUI 自动完成构建一个命令行,它一次构建一个短语(转到下一个短语的 TAB 会将文本复制到其他容器并清除下一个短语的输入)。

每个短语可以从自动完成中选择或完全任意(没有匹配仍然是有效的短语)。However, when a phrase is selected I need to the know which one it was (was it selected from the autocomplete or arbitrary).

问题是一个已经知道并期望某些自动完成选项返回的高级用户可能会简单地键入一个他们知道会在 AJAX 请求有机会返回之前很快返回并点击 TAB 的短语,这迫使我将该短语标记为“任意" 直到请求返回,这是不正确的并导致一些错误的行为。

我可以暂时将其标记为任意,然后如果它与响应中返回的任何内容匹配,则返回并更改它,但这对用户不友好,因为它可能会使用户在处理请求时所做的一切(因为短语是上下文相关的)无效。

我想我应该将自动完成列表缓存在 JS 变量中并将输入与该列表匹配,这样它将是同步查找而不是请求(我会继续发出请求,在每个按键上更新缓存的对象)

这似乎不是万无一失的(考虑一下,如果请求花费的时间太长,退格可能会导致它不同步,您将匹配一个选项少于应有的列表;直到请求返回具有更宽松约束的新列表)。

我不是在寻找一个明确的答案,而只是关于最有效的实现方式的一些建议,因为事实证明它非常棘手。

诸如查找数据结构之类的东西?我关心查找性能的大小是多少?也许你可以想办法让它防弹?

4

1 回答 1

1

您真的需要对单词匹配进行最新的异步搜索吗?请求可能的操作,以及它们的子任务/选项(如git pull)似乎是一个相对较小的集合,并且存储在同步键入时引用的缓存会让人感觉很快。这个对象可能很大,你会没事的。

如果您需要新的查找数据,您推荐的内容听起来不错。确保使用 debounce 之类的东西在用户停止输入一秒钟时发送请求,并指示现在正在发生查找(一个小的 ajax 微调器通常会通过它),并且可以缓存以供将来使用,假设然后不会以某种方式删除此动态内容。

于 2013-08-04T18:42:19.527 回答