我正在寻找一种使用DOJO进行文本框自动提示的简单方法。我将要查询的db表(使用PHP脚本,作为JSON返回)有超过100,000条记录,所以这实际上不应该是FilteringSelect或ComboBox的形式,因为我显然不希望用户单击向下箭头返回整个数据集。
其他库如JQuery和YUI让它变得简单,但这个特别的项目是基于DOJO的,我不愿意引入另一个JS类。
答案 0 :(得分:4)
它正在运作!
即使有我要查询的100,000条记录。返回速度低于30毫秒。我甚至将数据库大小提高到500,000条记录,并且自动建议的速度是非常可接受的(仍然低于120毫秒)。我确信我可以通过在PHP方面进行一些缓存来做得更好。
我最终使用 QueryReadStore 和 FilteringSelect 。 JsonRestStore 可能会有用,但我从dojo网站找到了一个简单的工作示例,并从中构建。
这是一个自动建议文本框的DOJO代码,可以访问非常大的数据集 - 简短而且很好:
var vendorStore = new dojox.data.QueryReadStore({
url: "../vms/htdocs/ajax/search.php"
});
var vendorSelect = new dijit.form.FilteringSelect({
name: "vendorSelection",
store: vendorStore,
autoComplete: false,
required: true,
labelType: "text",
placeHolder: "Search vendors",
pageSize: 20,
hasDownArrow: false,
style: "width: 175px;",
searchAttr: "company_name",
id: "vendorSelect"
},
"vendorSelection");
vendorSelect.startup();
当然,将<select id="vendorSelection"></select>
粘贴在页面正文中。效果很好。
再次感谢!
答案 1 :(得分:2)
我不熟悉jQuery或YUI是如何做到的,但Dojo中的ComboBox和FilteringSelect具有pageSize
属性,可用于限制从商店一次请求的项目数。您将在下拉菜单中看到不超过该数量的项目,并附带“更多选择”和“先前选择”选项,以便通过其他选项进行分页(如果适用)。
将它与在每次获取时查询服务器的数据存储(例如dojox.data.QueryReadStore或dojox.data.JsonRestStore)放在一起,而不是预先获取所有内容的商店(例如dojo.data.ItemFileReadStore) ,你应该能够做你想做的事。
答案 2 :(得分:0)
也许你可以让你的查询返回前X行。每次新点击,返回X个新行,跳过X。