2013-08-04 33 views
0

我正在构建一个使用jqueryUI自动完成的命令行,每次构建一个句子一个短语(TAB转到下一个短语会将文本复制到其他容器并清除下一个短语的输入)。高级用户的上下文自动完成 - 实现建议

每个短语既可以从自动完成中选择,也可以是完全任意的(没有匹配仍然是有效的短语)。但是,当选择一个短语时,我需要知道它是哪一个(是从自动完成还是任意选择)。

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

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

我想我应该缓存自动完成列表在一个JS变量和匹配输入对列表,这样它将是一个同步查询而不是请求(我会继续做请求,虽然,更新缓存每个按键上都有对象)

看起来好像没有这样的防弹功能(考虑一下如果请求时间太长,退格可能会导致它不同步,那么您将与较少选项的列表匹配比它应该;直到请求返回一个宽松约束的新列表)。

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

像查找数据结构的东西?在什么尺寸下我会关注查看性能?也许你可以想出一种方法来使它防弹?

回答

1

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

如果你需要新的查找数据,你建议听起来很不错。请务必使用类似debounce的内容仅在用户停止输入秒数时才发送请求,并且指示器正在发生查找(一种little ajax spinner通常会得到此信息),并且可以缓存以供将来使用,假设此动态内容不会被删除。