当项目中的数据量增长时,所有Web开发人员都会遇到此问题,而我还没有看到解决问题的明确,直观的最佳实践。当您启动项目时,通常会创建带有标记的表单,以帮助选择一对多关系的相关对象。
例如,我可能有一个带邻居的系统,每个邻居都属于一个邻居。在应用程序的第1版中,我创建了一个编辑用户表单,其中包含用于选择用户的下拉列表,它只列出了我在地理上受限的应用程序中的5个可能的邻域。
一开始,这很有效。只要我有100个或更少的记录,我的选择框将加载很快,并且相当容易使用。但是,让我说我的应用程序起飞并走向全国。而不是5个社区,我有10,000。突然间,我的小下拉需要永远加载,一旦加载,很难在按字母顺序排列的大量列表中找到您的邻居。
现在,在这种特殊情况下,拥有分层数据,并让用户使用多个动态生成的下拉列表向下钻取可能会正常工作。但是,当选择的对象/记录本质上不是分层时,最佳解决方案是什么?在过去,使用带有搜索框和列表的弹出窗口完成此操作,但这看起来很笨拙和过时。在今天的Web 2.0世界中,有什么方法可以在多个表单中找到一个对象?
我考虑使用Ajaxifed搜索框,但这似乎最适合自由文本,并且当要保存的数据只是对另一个对象或记录的引用时会稍微分开。
随意引用具有该问题的通用解决方案的特定库,或者以更一般的方式简单地分享您在项目中所做的事情
答案 0 :(得分:2)
我认为在这种情况下,自动完成文本框是一种很好的方法。在SO上,他们还使用自动完成框来标记条目,其中条目已经存在,即不是自由文本而是选择。 (请记住,创建新标签需要声誉!)
我个人更喜欢这个,因为我可以输入比用鼠标选择更快的东西,但我认为这是程序员的疾病:)
答案 1 :(得分:0)
自动完成通常是我的搜索体验中的最佳解决方案,但只有在用户能够轻松提供文本标记的情况下,或者作为对象名称的一部分或包含该对象的分类法(例如产品类别,或邮政编码)。
然而,这并不总是有效,特别是在“浏览”行为更合适的情况下 - 举一个真实的例子,我曾经为社区网站写了一个页面,允许用户向他们的朋友发送消息。我们在那里使用了自动完成,允许用逗号分隔多个条目。
当您知道要向其发送邮件的人的姓名时,它会很有效,但我们在用户接受期间发现大多数人并不真正知道谁在他们的朋友列表中并且无法使用该页面好吧 - 所以我们添加了一个带有朋友图标的列表弹出窗口,这样更成功。
(这是很久以前 - 现在每个人都只是复制Facebook ...)
答案 2 :(得分:0)
组织大量数据的不同方法:
搜索大量数据的不同方法:
层次结构易于理解且(通常)易于实现。但是,它们很难导航并导致含糊不清。空间可视化到目前为止最佳选项如果您的数据实际上是空间的,或者可以用这种方式表示;不幸的是,这适用于我们通常每天处理的数据的不到1%。标签很棒,但是 - 正如我们在这里看到的那样 - 通常会被误用,误解或以其他方式提供的效果低于预期。
如果您可以以相对自然的方式重新组织您的数据,那么这应该始终是第一步。无论最好的沟通方式,自然顺序通常都是最好的答案。
无论您如何组织数据,您最终都需要开始提供搜索功能,而且与数据组织不同,搜索方法往往是正交的 - 您可以实现多个。过滤和排序/分页是最简单的,如果自动完成文本框或分页列表(网格)可以实现所需的结果,那就去做吧。如果您需要提供在没有连贯组织的情况下搜索真正大量数据的功能,那么您需要提供全文搜索。
如果我能指出一些“最佳实践”列表,我会的,但HID很少这么明确。使用上述选项作为起点,看看你的选择。