我有一个应用程序,其中有多个搜索源。以前,用户必须在搜索之前选择要搜索的来源。如果他们没有选择,应用程序将默认为其中一个选项。
但是,现在他们想要同时搜索所有来源。这很好,但问题是当其中一个搜索返回时,它会覆盖以前的搜索结果。非常期待的行为。我基本上想要的是将新结果附加到已经打开的自动完成菜单,而不是覆盖旧的结果。当然,自动完成菜单在关闭时必须清空。
我想这是可能的,但最好的方法是什么?我想我可以有一个数组,我将结果附加到然后覆盖_renderMenu以使用此数组而不是传递给函数的项目。然后在关闭事件中清空所述数组。
这是最好的方式吗?还是有更优雅的解决方案?
一些代码: 好的,所以最终通过jquery自动完成调用searchAction。在collection.search中我执行ajax调用,此处URL是基于 this 参数创建的,然后调用respondWhithData并将搜索结果映射到适当的格式(即自动完成菜单的值和标签) )。从respondWithData调用响应后,jquery自动呈现结果菜单。因此,我可能不得不覆盖响应事件函数以及_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显示我想要的。 我觉得它很有用,但它并不完美。
答案 0 :(得分:0)
我可以看出你的情景如何,但我猜测:
你应该喜欢:
function search1() {
$.ajax({ ...
success: function(data) {
$('#myResultsDiv").html(data)
}
});
}
等
您需要将结果添加为:
,而不是覆盖#myResultsDivfunction search1() {
$.ajax({ ...
success: function(data) {
$('#myResultsDiv").append(data)
}
});
}
编辑:你也可以这样做:
var resultsArray = []; var searchDone = 0; var totalSearchs = 5; //假设5次搜索
function search1(){
function search1() {
$.ajax({ ...
success: function(data) {
//APPEND data to resultsArray
searchDone++;
if(searchDone==totalSearch) //syncronize the 5 searchs before render
renderSearchs(resultsArray);
}
});
}