使用DOJO自动完成文本框

时间:2011-10-24 03:45:54

标签: php autocomplete dojo

我正在寻找一种使用DOJO进行文本框自动提示的简单方法。我将要查询的db表(使用PHP脚本,作为JSON返回)有超过100,000条记录,所以这实际上不应该是FilteringSelect或ComboBox的形式,因为我显然不希望用户单击向下箭头返回整个数据集。

其他库如JQuery和YUI让它变得简单,但这个特别的项目是基于DOJO的,我不愿意引入另一个JS类。

3 个答案:

答案 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。