2014-10-03 68 views
0

我有一個應用程序,我有多個搜索源。以前,用戶必須在搜索之前選擇搜索的來源。如果他們沒有選擇,應用程序將默認爲其中一個選項。追加新的結果到開放的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顯示我想要的。 它的作品我猜,但它不完美。

+0

請添加對搜索後的一些代碼回 – Balder 2014-10-03 09:01:45

+0

做,但我不是很確定它如何幫助:) – benbjo 2014-10-03 10:04:06

+0

你能告訴我們哪些jQuery的自動完成你使用的插件?那裏有很多Autocomplete插件。 – 2014-10-03 10:58:06

回答

0

我可以計算的外觀您的方案,但我猜:

你應該有這樣的:

function search1() { 
    $.ajax({ ... 
     success: function(data) { 
     $('#myResultsDiv").html(data) 
     } 
    });  
} 

代替overwritting的#myResultsDiv需要追加的結果像:

function search1() { 
    $.ajax({ ... 
     success: function(data) { 
     $('#myResultsDiv").append(data) 
     } 
    });  
} 

編輯:你也可以做這樣的事情:

var resultsArray = []; var searchDone = 0; var totalSearchs = 5; //假設5個搜索

功能搜索1(){

function search1() { 
    $.ajax({ ... 
     success: function(data) { 
     //APPEND data to resultsArray 
     searchDone++; 
     if(searchDone==totalSearch) //syncronize the 5 searchs before render 
      renderSearchs(resultsArray); 

     } 
    });  
} 
+0

謝謝,但我不想同步所有的搜索顯而易見的原因,即用戶將不得不等待更長的時間,如果一個失敗,等等。 搜索全部通過相同的ajax調用,但使用不同的URL。儘管你的解決方案並不能真正幫助我完成自動完成,但是在成功回調之後發生了一些事情。即,自動完成調用其響應函數,以及rendermenu和item。 – benbjo 2014-10-03 09:56:24