我正在使用jqueryUI自动完成构建一个命令行,它一次构建一个句子(TAB转到下一个短语会将文本复制到其他容器并清除下一个短语的输入)。
每个短语可以从自动完成中选择,也可以完全随意(没有匹配仍然是有效短语)。但是,当选择一个短语时,我需要知道它是哪一个(是从自动完成还是任意选择)。
问题是高级用户已经知道并期望返回某些自动完成选项可以简单地键入他们知道会回来的短语并在AJAX请求有机会返回之前非常快地命中TAB,迫使我标记短语作为“任意”,直到请求返回,这是不正确的,并导致一些错误的行为。
我可以暂时将其标记为任意,然后返回并更改它,如果它匹配响应中返回的任何内容但这不是用户友好的,因为它可能使用户之后所做的一切无效(因为短语是上下文),而请求正在处理。
我猜我应该将自动完成列表缓存在JS变量中并将输入与该列表匹配,这样它将是同步查找而不是请求(我会继续发出请求,但更新缓存对象在每个按键上)
似乎这不会是防弹的(如果请求需要太长时间,请考虑退格可能导致它不同步,你将匹配一个选项少于它应该的列表;直到请求返回一个带有更宽松约束的新列表。
我不是在寻找一个明确的答案,而只是提出一些最有效的方法来实施这个问题,因为它证明非常棘手。
查找数据结构之类的东西?在什么尺寸我担心查看性能?也许你可以想办法让它变得无懈可击?
答案 0 :(得分:1)
你真的需要在单词匹配上进行最新的异步搜索吗?请求可能的操作及其子任务/选项(如git pull
)似乎是一个相对较小的集合,并且存储在同步键入时引用的缓存会感觉很快。这个对象可能非常大,你会没事的。
如果你需要新的查找数据,你推荐的听起来不错。请确保使用debounce之类的内容仅在用户停止键入一秒钟时发送请求,并指示现在正在查找(little ajax spinner通常会得到此结果),并且可以缓存以供将来使用,假设此动态内容不会以某种方式被删除。