我有一个应用程序,我有多个搜索源。以前,用户必须在搜索之前选择搜索的来源。如果他们没有选择,应用程序将默认为其中一个选项。追加新的结果到开放的jQuery自动完成菜单
但是,现在他们想要同时搜索所有来源。这很好,但问题是当其中一个搜索返回时,它将覆盖以前的搜索结果。相当多预期的行为。我基本想要的是追加新的结果到已经打开的自动完成菜单,而不是覆盖旧的结果。自然,自动完成菜单在关闭时必须清空。
我想这是可能的,但最好的方法是什么?我可以有一个数组我猜,我追加结果,然后覆盖_renderMenu使用此数组,而不是传递给函数的项。然后在关闭事件中清空所述数组。
这是最好的方式吗?还是有更优雅的解决方案?
部分代码: 好的,所以searchAction最终由jquery自动完成调用。在collection.search中,我执行ajax调用,这里的URL基于这个参数创建,然后调用respondWhithData并将搜索结果映射为适当的格式(即自动完成菜单的值和标签)。在从respondWithData调用响应之后,jquery会自动呈现结果菜单。因此,我可能必须覆盖reponse事件函数以及_renderMenu和可能的_renderItem,是的?
searchAction: function(searchTerm, collection, response){
var self = this;
$.when(collection.search(searchTerm, this)).then(function(data) {
self.respondWithData(data, response);
});
},
respondWithData : function(data, response) {
if (data.length > 0) {
var responseVal = _.map(data, this.mapData);
this.checkResponseCount(responseVal);
response(responseVal);
}
else {
response(this.emptyResult());
}
},
要清楚,问题不在于多重搜索本身,而在于渲染异步结果。我想呈现返回的第一个结果,然后在从服务器返回时立即追加其余结果。
编辑2: 只是试图在autocompleteresponse事件编辑ui.content,但一旦它呈现为某种原因,任何编辑不走......
编辑3:啊,ui.content只能是直接修改,没有改变。如果我推动每一个变化,而不是拼凑两个数组,ui.content显示我想要的。 它的作品我猜,但它不完美。
请添加对搜索后的一些代码回 – Balder 2014-10-03 09:01:45
做,但我不是很确定它如何帮助:) – benbjo 2014-10-03 10:04:06
你能告诉我们哪些jQuery的自动完成你使用的插件?那里有很多Autocomplete插件。 – 2014-10-03 10:58:06